【问题标题】:precision of subtracting from a float从浮点数中减去的精度
【发布时间】:2013-10-12 14:37:25
【问题描述】:

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

【问题讨论】:

  • 每个帖子一个问题。
  • 如果将 - 0.5 移到括号内会发生什么?还要确保在减号之后有一个空格,以免使用一元 -

标签: ios objective-c sprite-kit


【解决方案1】:

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

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

它给出了更精确的结果。

【讨论】:

  • 你所做的相当于改变x位置。 hero.position = CGPointMake(hero.position.x + 1, hero.position.y); 是等效的,不需要 SKAction。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多