我刚开始使用SpriteKit,我正在发现API。当按下按钮时,我有一个在屏幕上移动的对象。所以我所做的是设置一个NSTimer,而用户仍然持有并继续调用相同的方法每0.1秒移动一次对象。物体确实会移动,但在某个点移动时,它不会在水平方向上显示平滑过渡。所以我使用NSLog来查看物体位置,我发布它减去10点而不是0.5点。这是代码:
SKAction *moveLeft = [SKAction moveToX:((CGFloat)[[self childNodeWithName:@"Hero"] frame].origin.x)-0.5 duration:0.1];
[[self childNodeWithName:@"Hero"] runAction:moveLeft];
我该如何解决这个问题?此外,我在控制台中意识到坐标是150.000000而不是150或150.0。这可能是问题吗?
之前使用SpriteKit的人的另一个问题!! 在游戏场景中你想添加一个按钮,你在场景类或视图控制器中添加它?
答案 0 :(得分:0)
我找到了一个解决方案,我现在正在使用它:
SKAction *moveLeft = [SKAction moveByX:1 y:0 duration:0];
它可以提供更精确的结果。
答案 1 :(得分:0)
听起来你正在复制SKAction补间,在旧版本之前设置一个新补间。您也可以创建计时器而不是杀死计时器吗?没有看到实施就无法确定。
解决问题的一种方法是在触摸开始时在所需方向上设置SKAction,然后在触摸结束时移除动作。因此,您一次只能运行一个SKAction。
如果没有看到创建NSTimer的代码以及它如何处理它们,很难确定究竟发生了什么,所以我的答案基于你给我们的信息。这是一种可能的情况。