如果语句似乎无法正常工作

时间:2018-07-06 21:27:59

标签: swift if-statement sprite-kit

我有两个变量,一个速度和一个最小值。将速度与最小值进行比较,以查看速度是否应继续降低。由于某些原因,即使速度等于最小值,也会继续降低速度。

var wallSpeed       : CGFloat!
var wallSpeedMin    : CGFloat!
var wallSpeedChange : CGFloat!

override init(){
    wallSpeed         = 0.0035
    wallSpeedMin      = 0.0034
    wallSpeedChange   = 0.0001
}

最低速度接近测试速度。

if wallSpeed > wallSpeedMin
    {
        print("Wall speed has been increased")

        wallSpeed = wallSpeed - wallSpeedChange

        print("New speed is \(wallSpeed!)")
    }else
    {
        print("Player moved up screen")

        //Move player up instead
        playerNode.position.y = playerNode.position.y + 5

        print("Players Y value is \(playerNode.position.y)")
    }

即使壁速度等于第一次降低后的最小壁速度,它也不会命中else语句。

我的if语句设置不正确吗?是什么导致这种行为?

2 个答案:

答案 0 :(得分:1)

浮点数学无法正常工作。选中Is floating point math broken?

答案 1 :(得分:0)

您不能像这样比较浮点数...

由于浮点数表示的方式,我们不能简单地对它们进行一些数学运算。...

当我们使用整数时,它们直接以二进制格式表示,并且您可以对它们进行任何算术计算,而浮点数是遵循IEEE 754标准的32位容器,分为三部分:

符号的1位S

8位为指数

23个尾数

有关更多信息,Comparing Floating Point NumbersFloating Point in Swift