2015-11-07 168 views
3

我想在背景上創建我的播放器。不知何故,這是行不通的。節點計數器增加1,但不可見。我在添加背景後添加播放器,因此它應該位於頂部。該代碼我用它來創建播放器:SpriteKit:另一個節點上的節點

var player = SKSpriteNode() 

func addPlayer(gameScene: GameScene, xPos: CGFloat, yPos: CGFloat){ 
    player = SKSpriteNode(imageNamed: "player") 
    player.size = CGSize(width: fieldsWidth, height: fieldsWidth) 
    player.position = CGPoint(x: xPos, y: yPos) 
    gameScene.addChild(player) 
} 

我從另一個類訪問功能是這樣的:

 person().addPlayer(self, xPos: fieldsWidth/2, yPos: fieldsWidth/2) 

希望你能幫助我。

+1

爲什麼要明確設置精靈的大小?嘗試刪除尺寸線或檢查fieldsWidth和fieldsHeight的值是否有效(還請注意,對於使用fieldsWidth的高度) – giorashc

+0

由於手機的大小,我設置了精靈的大小。精靈不應該在iPhone 6和iPhone 6s上具有相同的尺寸。我計算一個特定的比例。 –

+0

@LukasKöhl以及當您將其添加到場景後打印出來時,玩家的實際尺寸是多少? – Whirlwind

回答

1

如果你確信你已經在需要的位置添加的節點,這可能是因爲這裏的節點數遞增,您可以設置播放機的和背景的zPosition使背景上述球員的情況:

var player = SKSpriteNode() 

//1. somewhere in your code set background's zPosition to 1 before you add it to the scene 

func addPlayer(gameScene: GameScene, xPos: CGFloat, yPos: CGFloat){ 
    player = SKSpriteNode(imageNamed: "player") 

    //2. Set player's zPosition to be higher than background's zPosition 
    player.zPosition = 2 
    player.size = CGSize(width: fieldsWidth, height: fieldsWidth) 
    player.position = CGPoint(x: xPos, y: yPos) 
    gameScene.addChild(player) 
} 

關於ignoresSiblingOrder ...我建議您將其保留至true,因爲它對性能有很大幫助。關於這種優化的唯一「事情」是,你必須明確地設置zPosition節點在相同的zPosition可以重疊,但你不想讓它們以隨機順序重疊(忽略當同步設置爲true時,SiboresOrder會做),而是以確定的順序重疊(由您控制​​)。這是從文檔:

當此屬性設置爲YES,當確定呈現順序時忽略 樹中節點的位置。渲染 節點在同一z位置的順序是任意的,並且每次渲染新幀時可能會更改 。

所以,只需明確設置zPosition,你會沒事的。

+0

已經嘗試過,它沒有工作。我也嘗試將背景背離(不重疊),只是將該玩家添加到場景中,儘管圖像名稱正確,但他仍然不可見。你有另一個想法嗎? –

+0

嘗試添加擴展名以及圖像名稱。 「player.png」而不是「player」。或者檢查玩家節點是否在場景中正確定位... – Whirlwind

+0

可悲的是,這沒有什麼區別。座標爲(31 | 31),錨點位於(0 | 0)(左下角?),它應該是可見的並且在屏幕上。 –

0

在場景的視圖控制器中,設置skView.ignoresSiblingOrder = false

+0

已經嘗試過。沒有工作。我也嘗試離開背景,只是將玩家添加到場景中,但他仍然不可見。 –

相關問題