2010-12-09 10 views
0

Ich fragte mich, ob jemand mir mit meinem Programm helfen könnte, Ich habe meine Sprites in eine bestimmte Menge von Koordinaten randomisiert. Ich möchte, dass einer der Sprites, die sich an dieser bestimmten Koordinate befinden, in der Lage ist, sie dazu zu bringen, etwas zu tun, wenn sie sich an dieser zufälligen Koordinate befinden. Das Problem, das ich habe, ist, dass ich eine lange Liste von if-Aussagen machen muss, die sagen, wenn dieses Sprite hier ist, tue dies, wenn ein anderes Sprite hier ist, mach das genau dasselbe.Machen Sie randomisierte Sprites in einer bestimmten Koordinate etwas tun

if (red1.position.y> = 0 & & red1.position.y < = 63) { r1animation id = [CCMoveTo actionWithDuration: 0,2-Position: ccp (red1.position.x, 33)]; [red1 runAction: r1animation]; } if (red2.position.y> = 0 & & red2.position.y < = 63) { r2animation id = [CCMoveTo actionWithDuration: 0,2-Position: ccp (red2.position.x, 33)]; [red2 runAction: r2animation]; } Ich möchte in der Lage sein zu sagen, wenn einer der Sprites an dieser genauen Koordinate sind dann verschieben Sie sie zu einem Punkt, in einer kurzen Menge an Code wie möglich. also im Grunde gruppieren die Sprites oder etwas, ich bin mir nicht sicher. wenn eine der Sprites

Dank

Antwort

0

ich will genau in diesem Koordinaten sagen können, sie dann zu einem Punkt bewegen

Zunächst geben Sie den ‚Hotspot‘ programmatisch :

CGPoint hotspot = ccp(32,32); // convenience macro, 
           //creates a CGPoint with x = 32, y = 32 

Sie einen Verweis auf alle Sprites in einem Array gespeichert werden soll, wenn man sie schaffen (können Sie cocos2d die ‚Tagging‘ auch verwenden, aber Ich mag in der Regel verwenden eine Anordnung der Einfachheit halber)

-(void)init { 
//.. misc 
// creating sprite returns a reference so keep it in an array 
CCSprite* curSprite = [CCSprite spriteWithFile: //...etc] 
[self.spriteArray addObject: curSprite]; 
// add all sprite references to your array 
} 

Jetzt können Sie über dieses Array durchlaufen zu sehen, ob der Rahmen des Sprites auf den Hotspot überlappen:

-(BOOL) checkAllSpritesForCollision 
{ 
    for (CCSprite *sp in self.spriteArray) 
    { 
    CGRect spriteRect = sp.frame; 
    if (CGRectContainsPoint(spriteRect,hotspot)) 
    { 
     // run your action on sp... 
    } 
    } 

    // you might like to return YES if a collision happened? 
} 

Dies ist eine Brute-Force-Methode, ob jeder Sprites Rahmen der Überprüfung enthält einen bestimmten Punkt. Es gibt natürlich viele Möglichkeiten, diese Katze zu häuten, aber hoffentlich werden Sie dadurch einen besseren Weg finden.

+0

danke für das Beispiel, wenn ich versuche, den Code zu kompilieren, bekomme ich 2 Fehler, sagen Anfrage für Mitglied 'SpriteArray', 'Rahmen' in etwas nicht eine Struktur oder Union.Der Code ist in CCTOUCHMOVED. \t CGPoint T1 = ccp (33,33); \t CGRect r1; \t r1 = CGRectMake (0,0,480,66); \t für (CCSprite * sp in self.spriteArray) { \t \t CGRect spriteRect = sp.Rahmen; \t \t if (CGRectContainsPoint (r1, touchLocation)) { \t \t \t if (CGRectContainsPoint (spriteRect, T1)) { \t \t \t \t prevLocation.y = touchLocation.y; \t \t \t \t CGPoint diffx = ccpSub (touchLocation, prevLocation); \t \t \t \t CGPoint r1pos = [rote1 Position]; \t \t \t \t [red1 setPosition: ccpAdd (diffx, r1pos)];}}} – Dangermouse

+0

Ich habe jetzt eine Reihe von Sprite-Positionen und ich habe eine weitere Reihe von Rectures. Ich möchte in der Lage sein zu sagen, wenn das Array von Sprites in einem der Array von Rectures dies tun – Dangermouse

0

Was Sie tun können, ist die Entfernung zu berechnen:

float pointX = thePoint.position.x; 
float pointY = thePoint.position.y; 

float pointDeltax = sprite.position.x-pointX; 
float pointDeltay = sprite.position.y-pointY; 
float pointDist = sqrt(pointDeltax*pointDeltax+pointDeltay*pointDeltay); 

Aber vielleicht davbryns Lösung passt zu Ihrem Zweck besser.

Verwandte Themen