0

我刚开始使用 SpriteKit,我正在发现 API。当按下并按住按钮时,我有一个要在屏幕上移动的对象。所以我所做的是在用户仍然持有并继续调用相同的方法以每 0.1 秒移动对象时设置一个 NSTimer。对象确实移动了,但在某个点移动时,它不会显示水平的平滑过渡。所以我使用 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 的人的另一个问题!在游戏场景中,您想添加一个按钮,您将其添加到场景类或视图控制器中?

4

2 回答 2

0

听起来您正在复合 SKAction 补间,在旧完成之前设置一个新的。也有可能您正在创建计时器而不是杀死它们?没有看到实施就无法确定。

解决问题的一种方法是在触摸开始时在所需方向设置一个 SKAction,然后在触摸结束时移除该动作。因此,您一次只能运行一个 SKAction。

如果没有看到您创建 NSTimer 的代码以及它如何处理它们,就很难确定到底发生了什么,所以我的答案基于您提供给我们的信息。这是一种可能的情况。

于 2013-10-12T15:20:55.713 回答
0

我找到了一个解决方案,我现在正在使用这个:

SKAction *moveLeft = [SKAction moveByX:1 y:0 duration:0];

它给出了更精确的结果。

于 2013-10-12T15:08:15.047 回答