我偶然发现了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)
}
价值发生了变化,但与自身一致。不是错误。