动画时移动动作

时间:2013-11-06 19:14:44

标签: ios objective-c sprite-kit

我试图在用户触摸时让角色在屏幕上从A点移动到B点。

我目前正在使用SKActions(在一个小组中)这样做。但是,我注意到SKActions需要一段时间,所以不会有恒定的移动速度,这是一个交易破坏者。较近的距离会导致角色移动得更慢,而远距离会使角色移动得更快。

有没有更好的方法呢?我在考虑在场景中使用-update方法,但不确定将这种方法与触摸事件联系起来的最佳方法。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您需要做的就是使用距离和速度自行计算持续时间。

速度=距离/时间,时间是你的持续时间,所以解决t。

在这里使用一些pseduo代码:

function moveToWithSpeed(p1, endPoint: p2, speed: speed)
{
//credit: http://stackoverflow.com/questions/1906511/how-to-find-the-distance-between-two-cg-points
CGFloat xDist = (p2.x - p1.x);
CGFloat yDist = (p2.y - p1.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
duration = distance/speed

SKAction.moveTo(p2, duration: duration);
}

其余我认为你可以弄清楚自己。

答案 1 :(得分:0)

您仍然可以使用SKAction和分组...

首先,你要计算两点之间的距离,a^2 + b^2 = c^2(毕达哥拉斯定理)之类的东西。然后从恒定的速度中找出角色应该基于c ^ 2移动的速度或速度。

然后将该变量发送到您组成的SKAction函数。这就是它的动态。

-(SKAction*)startActionWithDuration:(NSTimeInterval)timeInterval {
    SKAction* action = [SKAction moveToX:1.0 duration:timeInterval];
    return action;
}