我对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)
时,移动速度会变慢。
我需要以相同的速度移动精灵。我该怎么办?
感谢。
答案 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];