IPhone sdk, detecție coliziune mai precise și setați cadrul / limitele de UIImageView

voturi
0

Hei, Im având o mare problemă cu aplicația mea în acest moment, ei prea inexacte.

Am o imagine a unui ballooon, https://dl.dropbox.com/u/2578642/Balloonedit.png

Și eu am o săgeată care în cazul în care se ciocnește în balon jocul se termină.

În acest moment eu sunt popularea imaginea balonului cu 8 UIImageViews. și i-am detecta dacă dart hit-uri, acest lucru a fost să presupunem că pentru a face foarte precise, dar nu ei, săgeata destul de mult trece prin balon atunci când a însemnat sa de a se ciocni, asa ca am un plan, există o modalitate de a detecta în cazul în care DART lovește imaginea reală a balonului nu UIImageView, sau există vreo modalitate de a desena un chenar în jurul balonului și a detecta în cazul în care hit-uri pe care?

În prezent, eu sunt, folosind acest cod pentru a detecta coliziune:

if (CGRectIntersectsRect(pinend.frame, balloonbit1.frame)){
    [maintimer invalidate];
    accelManeger.delegate = nil;
[ball setImage:img];
[UIImageView beginAnimations:nil context:NULL];
[UIImageView setAnimationDuration:0.3];
ball.transform = CGAffineTransformMakeScale(2, 2);
[UIImageView commitAnimations];

}

Deci, într-o singură metodă, există 40 de aceste fragmente și după cum vă puteți imagina că nu este foarte precis / rapid pentru a răspunde. Așa cum am spus există o modalitate de a desena un chenar sau ceva in jurul balonului și a detecta coliziunea dintre graniță și lance? Pentru că atunci mi-ar imagina că ar fi mult înăbușe deoarece ar trebui doar să proceseze 5 biți de cod.

Multumesc pentru orice ajutor.

Aceasta este o întrebare mare, deci, dacă puteți răspunde i se va cumpăra aplicația :)

Noroc, Harry: /

Întrebat 07/04/2010 la 12:46
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

clopotele de alarmă începu să sune când am ajuns, „... 40 din aceste fragmente ...“. De ce nu refactor că într-o singură metodă care te sun în mod repetat?

Fără a cunoaște natura aplicației, nu sunt sigur dacă acest lucru este potrivit, dar pot să sugerăm să utilizați un motor de fizica cum ar fi Veverița fizica ? Se va lăsa să definiți formele de coliziune, gravitația pe obiecte în mișcare, și să declanșeze callback atunci când lucrurile lovit reciproc. Acest lucru va fi ordine de mărime mai repede decât ceea ce faci chiar acum.

Publicat 07/04/2010 la 12:55
sursa de către utilizator

voturi
0

baloanele sunt elipse aproape perfect. Cred că se poate folosi ceva de genul asta pentru a verifica coliziune

(x-cx)**2 / a**2 + (y-cy)**2 / b**2 <= 1.0

Unde..

  • x, y = poziția PIN
  • cx, cy = centrul balonului
  • a = lățime balon / 2
  • b = înălțimea balon / 2

Cu toate acestea, încă mai am nici o idee de ce codul de rulare nu este buna. Problemele s-ar putea să nu fie aici.

Publicat 07/04/2010 la 13:19
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more