3

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

我目前正在使用 SKActions(在一个组中)执行此操作。但是,我注意到 SKActions 需要持续时间,因此不会有恒定的移动速度,这会破坏交易。更近的距离会使角色移动得更慢,而远距离会使角色移动得更快。

有没有更好的方法来做到这一点?我正在考虑在场景中使用 -update 方法,但不确定将其与触摸事件联系起来的最佳方法是什么。

有什么建议吗?

4

2 回答 2

2

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

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

在这里使用一些伪代码:

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);
}

其余的我想你可以自己弄清楚。

于 2013-11-06T20:23:01.523 回答
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;
}
于 2013-11-06T19:37:38.937 回答