不精确的SKSpriteNode.zPosition CGFloat值

时间:2016-09-21 13:21:57

标签: ios swift sprite-kit cgfloat

我偶然发现了SKSpriteNode中的一个错误。当zPossition设置为十进制值时,它稍后包含原始值的渐近线。使用相同的输入测试CGFloat的行为与预期的一致,分配和检索的值相同。

环境:OSX 10.11.6,Xcode 8,Swift 3

测试用例:

func test_zPossition_Fails_Equivalence() {

    let sprite:SKSpriteNode = SKSpriteNode()
    let zPos:CGFloat = 2.1

    sprite.zPosition = zPos

    XCTAssertEqual(sprite.zPosition, zPos)
    // fails: 2.0999... is not equal to 2.1
}


func test_zPossition_Passes_Equivalence() {

    let sprite:SKSpriteNode = SKSpriteNode()
    let zPos:CGFloat = 2

    sprite.zPosition = zPos

    XCTAssertEqual(sprite.zPosition, zPos)
}

func test_CGFloat_Passes_Equivalence() {

    let zPosA:CGFloat = 2.1
    let zPosB:CGFloat = 2.1

    XCTAssertEqual(zPosA, zPosB)
}

编辑:我添加了另一个测试用例来比较zPosition

的帖子集值
func test_zPossition_Passes_Equivalence() {

    let sprite1:SKSpriteNode = SKSpriteNode()
    let sprite2:SKSpriteNode = SKSpriteNode()
    let zPos:CGFloat = 2.1

    sprite1.zPosition = zPos
    sprite2.zPosition = sprite1.zPosition

    XCTAssertEqual(sprite1.zPosition, sprite1.zPosition)
    XCTAssertNotEqual(sprite1.zPosition, zPos)
}

价值发生了变化,但与自身一致。不是错误。

0 个答案:

没有答案