[英]Merge several physics bodies
我正在嘗試將多個精靈節點合並到一個統一的物理體中。 例如:
我試圖將這三個障礙統一為一個精靈節點。 我查看了其他問題,並嘗試了以下方法:
使其中一個節點成為父節點,將其他節點添加到父節點並將它們設置為非動態的。 但是,這會禁用子節點的移動。
我嘗試使用所有其他障礙的物理體創建一個節點:
SKPhysicsBody(bodies: self.allNodePhysicsBodies)
我還嘗試使用“父”節點創建節點的聯合:
let joint = SKPhysicsJointFixed.joint(withBodyA: merge[0].physicsBody!, bodyB: merge[1].physicsBody!, anchor: CGPoint(x: 0, y: 0)) let joint1 = SKPhysicsJointFixed.joint(withBodyA: merge[0].physicsBody!, bodyB: merge[2].physicsBody!, anchor: CGPoint(x: 0, y: 0)) self.physicsWorld.add(joint1) self.physicsWorld.add(joint)
然而,這並沒有統一物理體。 它不會創建單個物理體。
我怎樣才能做到這一點? 我想我唯一的選擇是在創建節點之前統一紋理。
編輯
再次嘗試將屏障與物理體聯合起來:
let ourUnionOfBodies = SKPhysicsBody(bodies: [merge[0].physicsBody!, merge[1].physicsBody!, merge[2].physicsBody!])
ourUnionOfBodies.isDynamic = true
merge[2].physicsBody = ourUnionOfBodies
這就是你所需要的。
但是,您似乎在使用它時做錯了。 我假設您忘記的是將新創建的物理體的屬性設置為與您的世界和其中的其他對象交互所需的屬性。
我會犯同樣的錯誤,因為我假設聯合機構的所有屬性都會被新機構采用,特別是如果它們都相同的話。 但這種情況並非如此。
從文檔:
子項的屬性,例如質量或摩擦力,將被忽略。 僅使用子體的形狀。
因此,從數組中實體的並集創建了新實體后,現在您需要根據需要手動設置該實體的所有屬性。
例如。
// Putting the right bodies together, correctly
let ourUnionOfBodies = SKPhysicsBody(bodies: [bodyMine, bodyBeyonce])
ourUnionOfBodies.isDynamic = YES!
// and the result = TWINS!
您可以在 CGMutablePath 內繪制障礙,然后將其用作一個節點的物理體,盡管這需要做一些很長的工作。
let bodyPath = CGMutablePath()
bodyPath.move(to: CGPoint(x: ..., y: ...)) // Use move(to:) to “move the pen” somewhere without “drawing”
bodyPath.addLine(to: CGPoint(x: ..., y: ...)) // Use addLine(to:) to trace a line starting from the “pen”’s last position to the specified CGPoint position
// ...
physicsBody = SKPhysicsBody(polygonFrom: bodyPath)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.