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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass sieht aus wie ein sehr schwieriger Weg zu gehen, es zu tun. Ich havent gewesen lange Codierung selbst, aber vielleicht kann Folgendes helfen.
wir sagen, u habe ein nsmutablearray Feinde und fügen Sie den neuen Feind-Objekts auf dieses array, wenn Sie jemals erstellen. Feind-Objekt wäre eine ccnode und haben eine ccsprite innerhalb es genannt _enemySprite
dann machen Sie den touch
hoffe, das hilft
Aber wenn Sie es tut convertToGL: hat mir geholfen
InformationsquelleAutor glogic
Anderen Weg, es zu tun, ist, dass die Berechnung der Entfernung zwischen touch-position und die sprites.. Wenn touch ist nahe genug, um einem deiner sprites, können Sie es töten.. so Etwas..
InformationsquelleAutor user123