【发布时间】:2014-10-20 09:50:52
【问题描述】:
这是我第三次尝试解决 runAction 延迟完成的问题。
我已经做了一些测试,并走到了这一步。我希望有人能告诉我是否有某些设置导致了这种延迟。
我开始了一个新的精灵套件项目并添加了这个。它工作得很好。流畅的运动。
但是当我将“英雄”节点和此代码添加到我现有的项目中时,它会在操作和完成之间停止一毫秒。
有人知道原因吗?
-(void)loopTest {
SKAction *move = [SKAction moveTo:CGPointMake(hero.position.x+32, hero.position.y) duration:0.7];
[hero runAction:move completion:^{
[self loopTest];
}];
}
【问题讨论】:
-
哦,我明白了。有可能由于在这一帧评估了动作之后运行的完成块,下一个动作要到下一帧才会运行。因此,您有一个节点停止的 1 帧延迟。尝试使用 runBlock 操作而不是完成块。
-
loopTest 从 didmovetoview 调用一次,并且每次移动英雄一点。当动作结束时,它再次调用 loopTest 并再次移动英雄(仅用于测试)。毫秒不是一个精确的测量值,但暂停是清晰可见的,并且不会产生平滑的运动。
-
我更新了我的评论,在您的浏览器中刷新页面。 ;)
-
哈哈,在 iphone 上使用这个应用程序 :) 我会试试 runBlock 看看它是否能解决问题。会在我做的时候发布,现在在工作。谢谢
-
这听起来像是一个愚蠢的解决方案,但您是否考虑了 0.7 的操作持续时间?完成意味着它将等待它必须移动的 0.7 秒。除此之外,当您可以使用
[hero runAction[SKAction repeatActionForever:move]];或repeatAction: count:对应项时,为什么还要再次调用loopTest?延迟可能是由于您再次调用该方法而不仅仅是重做操作
标签: xcode sprite-kit delay skaction completionhandler