根据这个问题 https://stackoverflow.com/questions/26335052/how-to-compare-cgpoints-in-swift,使用 == 和 != 应该可以让你检查两个之间是否相等CGPoint
对象。
然而,下面的代码没有考虑两个CGPoint
即使它们输出相同的值,对象也是相等的。
检查平等的正确方法是什么CGPoint
物体?
Code:
let boardTilePos = boardLayer.convert(boardTile.position, from: boardTile.parent!)
let shapeTilePos = boardLayer.convert(tile.position, from: tile.parent!)
print("board tile pos: \(boardTilePos). active tile pos: \(shapeTilePos). true/false: \(shapeTilePos == boardTilePos)")
Output:
board tile pos: (175.0, 70.0). active tile pos: (175.0, 70.0). true/false: false
不幸的是,您在控制台中看到的并不是您的真正价值。
import UIKit
var x = CGPoint(x:175.0,y:70.0)
var y = CGPoint(x:175.0,y:70.00000000000001)
print("\(x.equalTo(y)), \(x == y),\(x),\(y)")
The problem is, the console only allows for 10-16 but in reality your CGFloat
can go even lower than that because on 64bit architecture, CGFloat
is Double
.
这意味着你必须投出你的CGPoint
值到一个Float
如果您想获得将出现在控制台上的相等性,那么您需要执行以下操作:
if Float(boxA.x) == Float(boxB.x) && Float(boxA.y) == Float(boxB.y)
{
//We have equality
}
现在我想更进一步。
在大多数情况下,我们使用 CGPoint 来确定场景上的点。我们很少愿意处理 1/2 点,它们让我们的生活变得混乱。
所以而不是Float
,我喜欢投射到Int
。这将保证两个点是否位于同一点上CGPoint
在场景空间中
if Int(boxA.x) == Int(boxB.x) && Int(boxA.y) == Int(boxB.y)
{
//We have equality
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)