Erkennen, wenn ein bestimmtes sprite berührt wurde auf Cocos2d-iphone

War ich nach Ray ' s tutorial für ein einfaches Spiel für iPhone (hier: http://goo.gl/fwPi) , und beschlossen, dass ich wollte, dass die Feinde eliminiert werden, wenn man Sie berührt.

Mein Erster Ansatz war, um zu laichen eine kleine CCSprite sprite auf dem touch-Position, dann verwenden Sie CGRectMake zum erstellen eines Begrenzungsrahmens, sagte sprite zu erkennen, wenn der Feind sprite berührt wurde. Ähnlich wie Ray übernimmt mit dem Projektil/Feind. Aber natürlich, meine Weise zu tun, es nicht funktioniert und ich kann nicht Graben mich aus diesem Loch.

Hier ist der relevante code-snippet. Jede Hilfe ist willkommen:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

//Wählen Sie eine der berührt, mit zu arbeiten 
UITouch *touch = [touches anyObject]; 
CGPoint Ort = [self convertTouchToNodeSpace: touch]; 
Lage = [[CCDirector sharedDirector] convertToGL:location]; 
CCSprite *touchedarea = [CCSprite spriteWithFile:@"Icon-72.png" rect:CGRectMake(location.x, location.y, 2, 2)]; 
touchedarea.tag = 2; 
[self addChild:touchedarea]; 
[_touchedareas addObject:touchedarea]; 

} 



- (void)update:(ccTime)dt { 

NSMutableArray *touchedareasToDelete = [[NSMutableArray alloc] init]; 
für (CCSprite *touchedarea in _touchedareas) { 
CGRect touchedareaRect = CGRectMake( 
touchedarea.position.x, 
touchedarea.position.y, 
touchedarea.contentSize.Breite, 
touchedarea.contentSize.Höhe); 

NSMutableArray *targetsToDelete = [[NSMutableArray alloc] init]; 
für (CCSprite *Ziel in _targets) { 
CGRect targetRect = CGRectMake( 
Ziel.position.x - (target.contentSize.Breite/2), 
Ziel.position.y - (target.contentSize.Höhe/2), 
Ziel.contentSize.Breite, 
Ziel.contentSize.Höhe); 

wenn (CGRectIntersectsRect(touchedareaRect, targetRect)) { 
[targetsToDelete addObject:target]; 
} 
} 

für (CCSprite *Ziel in targetsToDelete) { 
[_targets removeObject:target]; 
[self removeChild:Ziel der Bereinigung:YES]; 
} 

wenn (targetsToDelete.count > 0) { 
[touchedareasToDelete addObject:touchedarea]; 
} 
[targetsToDelete release]; 
} 

für (CCSprite *touchedarea in touchedareasToDelete) { 
[_touchedareas removeObject:touchedarea]; 
[self removeChild:touchedarea Aufräumen:YES]; 
} 
[touchedareasToDelete release]; 
} 
Ich fragte eine Frage zu best practices: stackoverflow.com/questions/2900691/... Hoffe, das hilft!

InformationsquelleAutor thoumad | 2011-01-16

Schreibe einen Kommentar