设置SpriteKit节点的位置(游戏中期)

时间:2016-02-14 19:20:41

标签: ios swift sprite-kit

我正在使用 Sprite Kit和Swift 2 ,目前我在设置我的节点位置到游戏中的特定位置时遇到问题。例如,如果我单击一个按钮,我希望玩家的位置变为(50,50)。

然而,当我尝试使用

player.position = CGPointMake(50,50)

什么都没发生。我已经看到人们已经说过一个通过添加以下行修复的错误:

player.physicsBody = player.physicsBody

然而这对我没什么用。我也尝试过:

player.position.x = 50
player.position.y = 50

但这也没有做任何事:(。

这也是玩家的贬值:

var player = SKSpriteNode(imageNamed: "blue")
player.name = "player"
player.position = CGPoint(x: 50, y: 100)
addChild(player)
player.size = CGSize(width: ogSquareSize!, height: ogSquareSize!)
player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size)
player.physicsBody?.dynamic = true
player.physicsBody?.usesPreciseCollisionDetection = true
player.physicsBody?.affectedByGravity = true;
player.physicsBody?.allowsRotation = true
player.physicsBody?.mass = 15;

就像我说它正常移动,我可以看到它,它通常与场景交互,但如果我试图直接改变它的位置,没有任何事情发生。

这是我尝试调用代码来改变其位置的地方:

func didBeginContact(contact: SKPhysicsContact) {
        let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
        switch(contactMask) {
        case playerCategory | object2Category:

            let player = childNodeWithName("player") as! SKSpriteNode
            player.position.y += 100;

        default:
            return
        }
    }

基本上这里发生的事情是我告诉它如果它与另一个物体发生碰撞,它的位置会向上移动100(我不是试图进行人为碰撞我实际上有一个很好的理由将它向上移动)

有什么想法吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

使用

中的新位置填充全局变量
  

didBeginContact

并改变

中的位置
  

didSimulatePhysics