我有一个角色。点击屏幕即可运行:
for touch in touches {
let location = touch.locationInNode(self)
print(location.x)
print("Pos \(self.magician.position.x)")
if location.x >= self.magician.position.x {
print("R")
self.movingRight = true
} else {
print("L")
self.movingLeft = true
}
}
所以,逻辑是:如果location.x是>比我的角色位置x,那意味着,我点击右侧,我的角色必须向这个方向移动,向右移动。但是当我点击右侧时,我不知道为什么它向左侧移动。
有人可以解释一下,为什么SpriteKit中的逻辑如此不同?
答案 0 :(得分:1)
我是否认为您的角色是SKSpriteNode的子类并且此代码在您的角色代码中运行?
touch.locationInNode(self)
这将返回给定节点(self)的坐标系中的触摸。因此,如果你的角色的锚点是(0.5,0.5),即节点的中间位置,那么如果你触摸右侧则location.x将为正,如果在左侧触摸则位于负位置。
这与你角色的x& y位置将取决于场景的锚点,但问题来自于尝试比较来自2个不同坐标系的x值。
答案 1 :(得分:0)
如果您的self.magician
被添加到另一个节点(而不是self
),您可以转换他的观点:
for touch in touches {
let location = touch.locationInNode(self)
print(location.x)
print("Pos \(self.magician.position.x)")
if location.x >= convertPoint(self.magician.position.x, fromNode: self.<thenodewhoaddmagician>) {
print("R")
self.movingRight = true
} else {
print("L")
self.movingLeft = true
}
}
如果您需要了解有关此方法的更多详细信息,请查看官方Apple指南here