我有以下代码来设置新的PhysicsBody:
let size = CGSize(width: 100, height: 10)
let player = SKShapeNode(rectOf: size)
player.lineWidth = 1
player.physicsBody = SKPhysicsBody(rectangleOf: size)
player.physicsBody?.affectedByGravity = false
player.physicsBody?.isDynamic = true
当用户触摸屏幕时,我试图确定他们是否触摸了对象内部、左侧或右侧:
func touchDown(atPoint pos : CGPoint) {
if (pos.x <= (player?.position.x)!) {
// left
} else if (pos.x >= (player?.position.x)! + (player?.frame.width)!) {
// right
} else {
print(player?.position.x)
print ((player?.position.x)! + (player?.frame.width)!)
print(pos.x)
// middle
}
}
调试语句和我的实验告诉我,player?.frame.width 没有返回对象的正确宽度。但是,更重要的是,即使物体偏离得很远,我似乎也能返回一个中心。该对象正在移动,因此我怀疑问题在于它返回了之前的位置。
所以,我有一个由两部分组成的问题:frame.width 是确定宽度的正确方法吗?在使用touchesBegan 事件时是否有什么因素可能导致这种明显的信息滞后?
最佳答案
位置取决于 anchor ,通常是 (0.5,0.5) 或 Sprite 的中心。
位置也是相对于父级的,因此您需要确保使用正确的坐标系,最好的选择是 touch.location(in:player)
来获取触摸玩家的坐标系。
完成此操作后,当 x 为负数时,您知道它是左边的,当 x 为正数时,您知道它是右边的。另外,当 -width/2 < x < width/2 时,您知道您位于节点内部,其中 0 表示您到达了死点。
关于ios - 在 Swift 中确定 SKPhysicsBody 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47196543/