【问题标题】:Is there an easy way to use decimals in calculation with SpriteKit?有没有一种简单的方法可以在 SpriteKit 的计算中使用小数?
【发布时间】:2014-04-24 16:58:16
【问题描述】:

我是 sprite kit 的新手,正在编写一个简单的游戏来学习它。

我的目标是让我的精灵以随机速度在屏幕上移动。这个精灵会定期生成,它可能达到的最大速度应该随着时间的推移而增加,以使游戏更加困难。

为此,我使用分数(基于时间的整数)来影响精灵的最小移动持续时间。我试图这样做的方式,如下面的代码所示,仍然只产生整数值。我希望拥有比整数更多的粒度。

int rando = (arc4random() % 150) + 50;
int denom = _scores + 50;
float actualDuration = rando/denom + 1;
NSLog(@"%f", actualDuration);


SKAction * actionMove = [SKAction moveTo:CGPointMake(-_blimp.size.width/2, actualY) duration:actualDuration];

我开始使用浮动变量来响应 nielsbot 的评论,并更改了我的代码结构以反映我的更改,但我仍然只得到整数值,而不是我正在寻找的小数。有谁知道为什么会这样?

已解决:我将整数变量更改为浮点变量,然后再将它们放入计算中。感谢尼尔斯博特的帮助!

【问题讨论】:

  • (稍微)更好地使用 arc4random_uniform()% 运算符
  • 如果你想要一个 0-5 之间以 0.1 为增量的随机浮点数,产生一个 0-50 之间的随机整数,转换为浮点数,然后除以 10.0。现在你有 50 种可能的速度。依此类推,具体取决于您想要的粒度。

标签: ios decimal sprite-kit


【解决方案1】:
float actualDuration = rando/denom + 1;
NSLog(@"%f", actualDuration);

我对转换规则不是 100% 有信心,但据我经验,randodenom 是整数,使用整数除法,产生整数值。

因此,您至少需要将分母转换为 float,但最好同时转换它们,并使用标准的 float 表示法来表示常量值 (1.0f):

float actualDuration = (float)rando / (float)denom + 1.0f;
NSLog(@"%f", actualDuration);

我个人倾向于在计算中使用它们时将所有整数值强制转换为浮点/双精度/CGFloat,这样就不会出现任何强制转换规则问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2010-09-06
    • 2020-12-16
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多