Sprite 在接近接触点时速度变慢
Posted
技术标签:
【中文标题】Sprite 在接近接触点时速度变慢【英文标题】:Sprite is slowing as it approaches touch point 【发布时间】:2014-03-12 19:43:22 【问题描述】:我正在使用 SpriteKit,我的精灵在接近接触点时速度变慢。
我希望精灵在屏幕上从初始点移动到触摸点时保持固定速度。
目前,我将持续时间设置为 3.0
在 touchesEnded 事件中,我收集新的触摸点并将值保存到属性中。
在场景更新事件中,我执行了一个
float realMoveDuration = 3.0;
SKAction *actionMove = [SKAction moveTo:self.newPoint duration:realMoveDuration];
[self.player runAction:[SKAction sequence:@[actionMove]]];
所以当玩家精灵开始越来越接近接触点时,运动会减慢,逐渐到达接触点。
这不是我想要的动作,我希望玩家精灵继续以恒定的速度移动到触摸点。
【问题讨论】:
更多上下文和代码,请 你在场景更新中说你运行那个动作。你每帧都运行那个动作吗?如果是这样,那可能是您的问题,因为您每秒要添加 60 次新操作。此外,如果您只有一个操作,则不需要序列。 【参考方案1】:您应该只在 touchesEnded 事件中运行您的 SKAction。
如果您在更新事件中有该代码,它将每秒启动新的 SKAction 60 次。您只需要在目的地发生变化时运行新的 SKAction。
如果在您到达原始目的地之前目的地发生了变化,您应该从该节点中删除该操作,然后添加一个新的。
此外,不确定您正在做什么的具体细节,但对象移动的速度取决于您指定的距离和到达那里的时间。因此,如果您希望节点以一致的速度移动,无论距离如何,您都需要进行计算以确定为您的 SKAction 设置的正确持续时间。
例如,如果速度代表每秒像素/单位,您可以这样做来计算您的持续时间:
duration = distance / speed;
【讨论】:
【参考方案2】:如果您使用 SKAction 移动精灵,请使用 timingMode
属性。默认值为SKActionTimingLinear
。所以如果你没有改变它,节点应该以恒定的速度移动。
这是可用的Action Timing Modes 的链接。
【讨论】:
是的,我没有修改timingMode属性,所以线性应该仍然有效......也许我把SKAction放在了错误的事件中?但是当我将代码放入 touchesEnded 事件时,我也遇到了同样的问题 您不应该将SKAction
放在更新方法中。会发生什么:在每次更新(= 每秒 60 次)时,SKAction
被调用并且玩家向新点移动。由于每次距离变小,但realMoveDuration保持3秒,所以速度逐渐降低,移动变慢。以上是关于Sprite 在接近接触点时速度变慢的主要内容,如果未能解决你的问题,请参考以下文章