我是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的评论,并改变了我的代码结构以反映我的更改,但我仍然只得到整数值,而不是像我想要的那样得到小数。有谁知道为什么会这样?
已解决:我将整数变量更改为浮点变量,然后再将它们放入计算中。感谢nielsbot的帮助!
答案 0 :(得分:1)
float actualDuration = rando/denom + 1;
NSLog(@"%f", actualDuration);
我对投射规则没有100%的信心,但据我所知,发生的事情是rando
和denom
是整数并使用整数除法,从而导致整数值。
因此,您需要至少将分母投射到float
,但最好将它们同时投射,以及对常量值使用标准float
符号({{1} }):
1.0f
我个人倾向于在计算中使用它们时将所有整数值强制转换为float / double / CGFloat,这样就不会出现任何强制转换规则问题。