2011-01-08 16 views
7

sto facendo un cannone per sparare oggetti. dietro al canone è attaccato lo stantuffo. lo stantuffo agisce per impostare velocità e angolo. canon ruota da 0 a 90 gradi e lo stantuffo si muove avanti e indietro per regolare la velocità. quando ruoto il canone con i tocchi, si è mosso bene. quando lo stantuffo viene tirato indietro con i tocchi spostati e ruota significa che lo stantuffo è vincolato all'esterno del canone.delimitando uno sprite in cocos2d

come controllare questo: -

mio codice per stantuffo e la rotazione del canone sul tocchi spostato. (Para3 è il canone, para6 è il mio stantuffo): -

CGPoint touchLocation = [self convertTouchToNodeSpace:touch]; 
    CGPoint oldTouchLocation = [touch previousLocationInView:touch.view]; 
    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation]; 
    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation]; 
    if (CGRectContainsPoint(CGRectMake(para6.position.x-para6.contentSize.width/2, para6.position.y-para6.contentSize.height/2, para6.contentSize.width, para6.contentSize.height), touchLocation) && (touchLocation.y-oldTouchLocation.y == 0)) 
    { 
     CGPoint diff = ccpSub(touchLocation, oldTouchLocation); 
     CGPoint currentpos = [para6 position]; 
     NSLog(@"%d",currentpos); 
     CGPoint destination = ccpAdd(currentpos, diff); 
     if (destination.x < 90 && destination.x >70) 
     { 
      [para6 setPosition:destination]; 
      speed = (70 + (90-destination.x))*3.5 ; 
     } 

    } 
if(CGRectIntersectsRect((CGRectMake(para6.position.x-para6.contentSize.width/8, (para6.position.y+30)-para6.contentSize.height/10, para6.contentSize.width, para6.contentSize.height/10)),(CGRectMake(para3.position.x-para3.contentSize.width/2, para3.position.y-para3.contentSize.height/2, para3.contentSize.width, para3.contentSize.height)))) 

      { 

     [para3 runAction:[CCSequence actions: 
          [CCRotateTo actionWithDuration:rotateDuration angle:rotateDiff], 
          nil]]; 
     CGFloat plungrot = (rotateDiff); 
     CCRotateTo *rot = [CCRotateTo actionWithDuration:rotateDuration angle:plungrot]; 
     [para6 runAction:rot]; 
    } 
} 

risposta

2

come su u fare questo che si utilizza la [CCMoveTo actionWithDuration: Posizione:] metodo ??

Tramite questo metodo è possibile controllare facilmente la velocità mediante l'argomento "actionWithDuration" che prende valori interi di tempo in secondi, mentre la direzione può essere regolata tramite l'argomento "position" che accetta ccp (x, y) come valori per il punto in cui vuoi che il tuo stantuffo si sposti.

Si può usare in questo modo ....

CCSprite *plunger = [[CCSprite alloc] initWithFile:@"plunger.png"]; 
    plunger.position = ccp(240,240); 
    [self addChild:plunger z:10]; 
    [plunger release]; 

    id = [CCMoveTo actionWithDuration:3 position:ccp(300,240)]; 

I valori indicati sono di mia scelta. Puoi usarli secondo la tua conformità.

Spero che ti aiuti ....

1

Spero che ho capito correttamente alla domanda: se il problema è, che il cannone e lo stantuffo sia ruotano intorno ai loro propri punti centrali, ma si vuole loro di ruotare insieme, allora la soluzione dovrebbe essere quello di rendere lo stantuffo uno sprite bambino del cannone (questo rende anche la posizione plugers rispetto al cannone), ossia

[para3 addChild:para6] 

allora avete solo bisogno di ruotare il cannone e il lo stantuffo sarà ruotato con esso.

se ho ottenuto il vostro domanda totalmente sbagliato, forse si potrebbe inviare uno screenshot :-)

+0

aggiunto come un bambino. ancora il suo limite lo sprite (lo stantuffo delimita il cannone) quando il tocco termina il metodo funzionerà correttamente. in tocchi spostati ancora si limita dopo aver aggiunto bambino. – Srinivas

Problemi correlati