2016-02-14 61 views
0

我正在使用Sprite Kit和Swift 2,目前我的節點位置設置爲遊戲中間某個特定位置時出現問題。例如,如果我點擊一個按鈕,我希望玩家的位置變成(50,50)。設置SpriteKit節點的位置(中游戲)

然而,當我嘗試使用

player.position = CGPointMake(50,50) 

什麼也沒有發生。我已經看到人們說這是一個通過添加該行來修復的錯誤:

player.physicsBody = player.physicsBody 

但是這對我沒有幫助。我也試着這樣做:

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

但是,這也無助:(

而且,這裏是玩家的decleration:就像我說的是正常移動

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向上移動其位置(我不是試圖做人工碰撞其實我有一個很好的理由移動它向上像這樣)。

任何想法? 謝謝!

+0

你看到你的球員在所有,但你無法重新定位它(或者玩家是在場景中不可見)?此外,更多的上下文會有幫助(例如,玩家的父節點是什麼,玩家是否擁有物理身體,你如何移動等等) – Whirlwind

+0

@Whirlwind yes對象是非常標準的,並且是場景的一個孩子。你可以看到它,它的行爲正常,但是當我試圖給它一個特定的位置時,它不會移動到那個位置。我也會將其聲明添加到該問題中。 – MarshallD

+0

如果可能,你應該嘗試添加一個最小的例子,它可以重現你所說的...... – Whirlwind

回答

1

裝滿新位置的全局變量

didBeginContact

,並更改

didSimulatePhysics位置