2011-05-13 18 views
6

que tiene algún problema con CCMoveTo:CCMoveTo: velocidad de movimiento

 
id actionMove = [CCMoveTo actionWithDuration:3 position:ccp(pointBoard[x][y].x,pointBoard[x][y].y)];

por ejemplo, mi sprite de inicio del movimiento ccp(20,460) y mover a ccp(20,0) que está bien. Pero cuando sprite necesita moverse a ccp(20,200), la velocidad de movimiento se vuelve más lenta. Necesito mover el sprite con la misma velocidad. ¿Cómo puedo hacerlo?

Gracias.

Respuesta

0

Aquí la velocidad del sprite varía en función de la distancia. Si la distancia de ccp (20,460) a ccp (20,0) es igual que ccp (20,0) a ccp (20,200). La velocidad se mantiene igual. Pero si la distancia varía, la velocidad varía en consecuencia (si la duración es la misma).

Puede reducir el tiempo si desea más velocidad.

+0

¿puedo mover el sprite sin duración, solo establecer la velocidad y la posición? –

+0

si no desea una duración.puede establecer una duración como 0.Pero no puede controlar la velocidad del sprite usando MoveTo (Puede moverse manualmente al incrementar su posición). – Anish

19

Necesita calcular la "distancia" entre sus puntos [inicio] y [fin] y luego puede calcular la "duración" para que su sprite se mueva con velocidad constante. Algo como,

velocidad de flotación = 1; // aquí define la velocidad que quiere usar.

CGPoint start = sprite.position; // here you will get the current position of your sprite. 
CGPoint end = ccp(pointBoard[x][y].x,pointBoard[x][y].y); 

float distance = ccpDistance(start, end); // now you have the distance 

float duration = distance/speed; // here you find the duration required to cover the distance at constant speed 

Ahora puede llamar a la función CCMoveTo y proporcionar la duración calculada anteriormente para hacer que su sprite se mueva a la misma velocidad.

Espero que ayude .. !!

5

Para mantener su velocidad de movimiento constante para todas las distancias, defina la velocidad con la que necesita mover el sprite y use la fórmula velocidad-tiempo-distancia que aprendió de niño en su clase de física para encontrar una desconocida de los tres .

float speed = 50.0f; 
id duration = ccpDistance(sprite.position, pointBoard[x][y])/speed; 
id moveAction = [CCMoveTo actionWithDuration:duration position:pointBoard[x][y]]; 
+1

La velocidad debe ser un flotador, no una identificación – apple16

0

Simplemente utilice las matemáticas simples (tiempo = distancia/velocidad) para calcular el tiempo requerido para moveAction.

float speed = 13.0; 
CGPoint startPoint = ccp(20,300); 
CGPoint endPoint = ccp(20,100); 

float time = ccpDistance(startPoint, endPoint)/speed; 
id moveAction = [CCMoveTo actionWithDuration:time position:endPoint]; 
0

Usted puede spped mantener la velocidad de la variable y posición mainatain posición: acción CGPointMake.

velocidad de flotación = 3.67;

CCMoveTo * moveuserleft; CCMoveTo * moveuserleft2;

moveuserleft = [CCMoveTo actionWithDuration:speed position:CGPointMake(235*scaleX,200*scaleY)]; 

    moveuserleft2 = [CCMoveTo actionWithDuration:speed position:CGPointMake(360*scaleX,200*scaleY)]; 

    CCSequence *scaleSeqleft = [CCSequence actions:moveuserleft,moveuserleft2, nil]; 

    [user runAction:scaleSeqleft];