cocos2d-iphone bezier

cocos2d iphone - Girar un sprite en una curva de Bezier en cocos2d



cocos2d-iphone (2)

Cada vez que necesito un sprite para seguir en un camino particular Bezier y rotar en consecuencia. Creo un camino más CCBezier usando CCBezier . Y usa el método CCRotateTo para girar el sprite a un ángulo particular. La duración de la rotación es la duración de bezierAction y el ángulo de rotación puede calcularse manualmente. Al igual que en su ángulo de imagen es de -45 a 45. Así que el código podría ser así ..

ccBezierConfig bezier; bezier.controlPoint_1 = ccp(0, s.height/2); bezier.controlPoint_2 = ccp(300, -s.height/2); bezier.endPosition = ccp(300,100); id bezierForward = [CCBezierBy actionWithDuration:10 bezier:bezier]; [sprite runAction:bezierForward]; [sprite setRotation:-45]; [sprite runAction:[CCRotateTo actionWithDuration:10 angle:45]];

Complete los valores en consecuencia ... Esto es solo un código de fragmento ... :)

Estoy tratando de hacer que un sprite siga una curva bezier. Encontré algunas publicaciones en el foro en el sitio de Cocos2D y seguí las instrucciones, pero todavía no puedo hacer que el sprite gire correctamente. Alguien puede ayudar.

El código que agregué al método de actualización de la función BezierBy es el siguiente

float qx = (powf(1-t,2)*xa + 2*(1-t)*t*xb+powf(t,2)*xc); float qy = (powf(1-t,2)*ya + 2*(1-t)*t*yb+powf(t,2)*yc); double deltaX = x-qx; double deltaY = y-qy; double degrees = (-180/M_PI)*ccpToAngle(CGPointMake(deltaX,deltaY)); [target_ setRotation:degrees];

El artículo original se puede encontrar aquí

Cualquier ayuda sería genial en el momento en que la rotación parece bastante errática


Sugiero que calcules el ángulo del movimiento de los sprites durante el último cuadro y usas este valor para rotar el objeto en consecuencia. Este método funcionará para cada tipo de movimiento, incluidos los senderos de bezier complicados. Esto también le ahorrará el trabajo de sincronizar la rotación con el movimiento en comparación con la otra solución ofrecida.

CGPoint vector = ccpSub(sprite.position, lastPosition); sprite.rotation = atan2(vector.x, vector.y) * 180 / M_PI; lastPosition = sprite.position;

Por supuesto, necesitará poner este código en un ciclo de actualización con lastPosition como una variable global.