CCMoveTo:移动速度

时间:2011-05-13 06:47:27

标签: cocos2d-iphone

我对CCMoveTo有一些问题:

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

例如我的精灵开始从ccp(20,460)移动并移至ccp(20,0)没关系。但是当精灵需要移动到ccp(20,200)时,移动速度会变慢。 我需要以相同的速度移动精灵。我该怎么办?

感谢。

5 个答案:

答案 0 :(得分:19)

您需要计算[开始]和[结束]点之间的“距离”,然后您可以计算“持续时间”,以便您的精灵以恒定速度移动。像,

浮动速度= 1; //这里你定义了你想要使用的速度。

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

现在你可以调用CCMoveTo函数并提供上面计算的持续时间,让你的精灵以相同的速度移动。

希望它有所帮助.. !!

答案 1 :(得分:5)

要保持所有距离的移动速度不变,请定义移动精灵所需的速度,并使用您曾在物理课中作为孩子学习的速度 - 时间 - 距离公式,以从三者中找到未知物。

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

答案 2 :(得分:0)

这里精灵的速度根据距离而变化。如果从ccp(20,460)到ccp(20,0)的距离与ccp(20,0)到ccp(20,200)的距离相同。速度保持不变。但是如果距离变化,速度会相应变化(如果持续时间相同)。

如果你想要更快的速度,你可以减少时间。

答案 3 :(得分:0)

只需使用简单的数学(时间=距离/速度)来计算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];

答案 4 :(得分:0)

你可以快速变换速度变量和位置主变量位置:CGPointMake动作。

浮动速度= 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];