2016-01-27 35 views
11

我已經創建了一個帶有物理bodys的SpriteKit場景。這工作得很好。我還在使用蘋果最佳實踐和「攝像頭節點」滾動場景。SpriteKit運動場景物理接頭損壞

我的場景節點樹是這樣的:

Scene 
|- World 
    |- Camera node 
    |- Game nodes with physics bodys 

我的問題是,在遊戲中創建新的關節(主要是固定接頭)動態新節點。此時,世界節點的位置與開始時不同(例如:開始時(0,0),遊戲期間(1000,500))。 現在,固定關節的錨點不在我想要的位置,它在現場的某個地方。

我假設,場景的座標系與物理引擎的座標系不同。

對於錨點,我用下面的轉換:

[world.scene convertPoint:node.position fromNode:node.parent]; 

我想在「節點」的位置,然後設定anchorpoint。 移動世界節點後,定位點的計算不再有效。

感謝您的幫助!

格爾茨 - Nekro

更新:

代碼居中播放器上的場景

- (void)centerOnNode:(SKNode*)node { 
    CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent]; 
    node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y); 
} 
+0

嘗試添加您的遊戲節點到世界而不是相機節點。我實施了一個測試應用程序,並在移動世界/相機按預期工作後添加了一個關節。 – 0x141E

+0

@ 0x141E對不起,我更新了我的文字。我將遊戲節點並行添加到攝像機節點,而不是攝像機節點的子節點。奇怪的是,如果我爲我的SpriteKit場景激活物理的可視化,偶爾會出現連接到我的中央播放器節點的關節。我已經爲創建關節的唯一函數設置了一個斷點,但它看起來像這條路徑從來沒有跑這個「鬼關節」... – Nuker

+0

只是爲了確保:你的物理機構使用場景座標連接?而不是Node的? – ColdSteel

回答

0

有兩個要求使用關節與SpriteKit物理學:

  1. 定義世界(場景)空間中的關節。
  2. 不要移動世界。

從您的問題和評論,這聽起來像你有#1右:當聯合是不是場景的直接子節點之間,你需要轉換座標到場景空間才能使用它們定義一個聯合。

但是,當您嘗試移動根座標系時,SpriteKit物理不能很好地處理它。因此,通過移動世界來實施「照相機」會給關節帶來麻煩。相反:

  • 如果你能負擔得起爲目標的iOS 9.0/OS X 10.11/tvOS 9.0及以上,使用SKCameraNode而不是移動世界。它也更容易! (如果你想知道你是否只能支持iOS 9,請檢查adoption rate statistics,並與你的開發時間表進行比較......如果你暫時不會發貨,那麼iOS 9可能是「 1「操作系統版本,請記住熱心客戶和早期使用者之間的高度相關性。)

  • 如果您仍然支持iOS 8/OS X 10.10,請嘗試添加額外的圖層到您的場景:通過移動您場景中的子節點和您的所有遊戲內容的父節點來僞造相機。