2011-01-08 15 views
7

estoy haciendo un canon para disparar objetos. la parte posterior del canon que el émbolo está conectado. el émbolo actúa para establecer la velocidad y el ángulo. el canon gira de 0 a 90 grados y el émbolo se mueve hacia adelante y hacia atrás para ajustar la velocidad. cuando estoy girando el canon con toques movido funciona bien. cuando el émbolo se retira con toques movidos y gira significa que el émbolo está fuera del canon.limitando un sprite en cocos2d

cómo controlar esto: -

mi código de émbolo y la rotación del canon de toques se movió. (Párrafo3 es el canon, para6 es mi émbolo): -

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]; 
    } 
} 

Respuesta

2

cómo sobre u hacer esto que utiliza el [CCMoveTo actionWithDuration: Posición:] método ??

Mediante este método puede controlar fácilmente la velocidad mediante el argumento "actionWithDuration" que toma valores enteros de tiempo en segundos, mientras que la dirección se puede ajustar a través del argumento "posición" que toma ccp (x, y) como valores para el punto al que quieres que se mueva tu émbolo.

Puede utilizar de esta manera ....

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)]; 

Los valores dados son de mi elección. Puede usarlos según su acuerdo.

Espero que te ayude ....

1

Espero que he entendido bien la pregunta: si el problema es, que el cañón y el émbolo ambos giran alrededor de sus propios puntos centrales, pero desea que giran juntos, a continuación, la solución debe ser hacer el émbolo un sprite hijo del cañón (esto también hace que la posición plugers en relación con el cañón), es decir

[para3 addChild:para6] 

entonces sólo tiene que girar el cañón y la el émbolo se rotará con él.

si me dieron su pregunta totalmente equivocado, tal vez puede publicar una captura de pantalla :-)

+0

y añada como niño. todavía está limitando el sprite (el émbolo limita el cañón) cuando toca el método terminado, funcionará correctamente. en toques movió aún límites después de agregar niño. – Srinivas

Cuestiones relacionadas