/ / cocos2d detekcia kolízie BOOL Flag - objektív-c, xcode, cocos2d-iphone

cocos2d detekcia kolízie BOOL Flag - objektív-c, xcode, cocos2d-iphone

Skutočne sa snažím dostať hlavu do kolíziedetekcia, tu sú moje detaily hry: Mám znak, ktorý sa môže voľne pohybovať okolo obrazovky a odrážať guľky Nepriatelia sú generovaní mimo obrazovku a "hrdina" ich môže strieľať (keď sú vytvorené guľky a nepriatelia, sú uložené v poli a potom odstránené pri kolízii) V súčasnosti, ak nepriateľ kontaktuje hrdinu, potom sa nič nedeje, chcel by som, aby bol život odstránený pri kontakte a verí, že sa to robí pomocou detekcie kolízie. používam

(CGRectIntersectsRect([hero boundingBox], [enemy boundingBox]))

Ale nie všetky zrážky sú zistené a potomzrazu sa zistí 3. Domnievam sa, že je to spôsobené viacerými kolíziami, ktoré sa odhalia, keď sa objekty prechádzajú cez seba. Pokúsil som sa použiť príznak BOOL, ale neverím, že to robím správne, môj kód:

.h
BOOL collision;
.m
-(void)update:(ccTime)deltaTime {
if (collision == NO) {
if (CGRectIntersectsRect([hero boundingBox], [enemy boundingBox])) {
CCLOG(@”collision detected!!!!!!!!!!!!!!!!”);
collision = YES;
}
}
}

Je to najlepší spôsob riešenia zistenia kolízie a ak áno, ako implementujete príznak BOOL?

odpovede:

1 pre odpoveď č. 1

Stačí nastaviť boolean na áno, keď sa zrazí a nie, keď prestanete kolovať, aby ste vedeli, že budúci čas, keď ide o novú kolíziu.

if (CGRectIntersectsRect([hero boundingBox], [enemy boundingBox])) {
CCLOG(@”collision detected!!!!!!!!!!!!!!!!”);
if(!collision) {
// REMOVE LIFE
}
collision = YES;
}
else {
collision = NO;
}

0 pre odpoveď č. 2

Vytvorte vlastnosť bool pre váš nepriateľský objekt a nastavte ho na metódu init nepriateľa. Pri zistení zrážky nastavte hodnotu na hodnotu true a vo svojej metóde aktualizácie skontrolujte nasledovné:

if (enemy.isCollide)
{
if (!CGRectIntersectsRect([hero boundingBox], [enemy boundingBox]))
{
enemy.isCollide = No;
}
}
else
{
if (CGRectIntersectsRect([hero boundingBox], [enemy boundingBox])) {
enemy.isCollide = Yes; }
}