/ Détection de collision BOOL / cocos2d - objectif-c, xcode, cocos2d-iphone

Détection de collision cocos2d BOOL - objectif-c, xcode, cocos2d-iphone

J'essaie vraiment de faire taire ma têtedétection, voici les détails de mon jeu: J'ai un personnage qui peut se déplacer librement sur l'écran et tirer des balles Les ennemis sont générés hors de l’écran et le ‘héros’ peut les tuer (lorsque des balles et des ennemis sont créés, ils sont stockés dans des tableaux puis retirés lors d’une collision) Actuellement, si l'ennemi entre en contact avec le héros, rien ne se passe alors, j'aimerais qu'une vie soit supprimée au contact et crois que cela se fait par détection de collision. j'utilise

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

Mais toutes les collisions ne sont pas détectées, puistout à coup 3 sera détecté. Je pense que cela est dû au fait que plusieurs collisions sont détectées lorsque les objets se croisent. J’ai essayé d’utiliser un drapeau BOOL pour, mais je ne crois pas que je le fais correctement, mon code:

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

Est-ce la meilleure façon de traiter la détection de collision et, le cas échéant, comment implémentez-vous l'indicateur BOOL?

Réponses:

1 pour la réponse № 1

Vous définissez simplement le booléen sur oui lorsque vous entrez en collision et sur non lorsque vous vous arrêtez afin que vous sachiez la prochaine fois que c’est une nouvelle collision.

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

0 pour la réponse № 2

Créez une propriété bool pour votre objet ennemi et définissez-la sur false avec la méthode init de l’ennemi. Lorsque la collision sera détectée, définissez sa valeur sur true et dans votre méthode de mise à jour, vérifiez quelque chose comme ceci:

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