从浮点数中减去的精度

时间:2013-10-12 14:37:25

标签: ios objective-c sprite-kit

我刚开始使用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的人的另一个问题!! 在游戏场景中你想添加一个按钮,你在场景类或视图控制器中添加它?

2 个答案:

答案 0 :(得分:0)

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

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

它可以提供更精确的结果。

答案 1 :(得分:0)

听起来你正在复制SKAction补间,在旧版本之前设置一个新补间。您也可以创建计时器而不是杀死计时器吗?没有看到实施就无法确定。

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

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