为什么在我的SpriteKit游戏中,移动逻辑是不同的?

时间:2016-07-05 10:37:25

标签: ios swift sprite-kit

我有一个角色。点击屏幕即可运行:

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中的逻辑如此不同?

2 个答案:

答案 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