pipeUp.physicsBody = SKPhysicsBody(rectangleOfSize: pipeUp.size)
在這個編碼我用rectangleOfSize
碰撞物理身體,但如果我想通過像素的圖像只是形狀用,有什麼我應該使用的rectangleOfSize
?SpriteKit PhysicsBody非矩形碰撞
pipeUp.physicsBody = SKPhysicsBody(rectangleOfSize: pipeUp.size)
在這個編碼我用rectangleOfSize
碰撞物理身體,但如果我想通過像素的圖像只是形狀用,有什麼我應該使用的rectangleOfSize
?SpriteKit PhysicsBody非矩形碰撞
你應該做一個CGPath
這是你的物體的形狀,並使用SKPhysicsBody
的init(polygonFromPath path: CGPath)
爲described here
可基於紋理創建一個物理體:
pipeUp.physicsBody = SKPhysicsBody(texture:pipeUp.texture)
它將創建一個alpha遮罩紋理,因此任何具有alpha 0的像素都不會被包含在物理體中。
編輯:
@classenApps讓我意識到我犯了一個擴展做到這一點,所以我會添加它的答案是正確的。
extension SKPhysicsBody
{
convenience init(texture: SKTexture)
self.init(texture:texture,size:texture.size())
}
我會使用KnightOfDragon的方法與添加size
的:參數是這樣的:
pipeUp.physicsBody = SKPhysicsBody(texture: pipeUp.texture, size: pipeUp.size)
我相信是有/曾經是使用CGPath
內存泄漏。
中處理此問題,您的方式是基於AppleDocs執行此操作的方式,我有一個擴展名,它沒有大小 – Knight0fDragon
如果您需要明確地告訴什麼alphaThreshold使用紋理,另一種解決方案可以是:
/**
Creates a body from the alpha values in the supplied texture.
@param texture the texture to be interpreted
@param alphaThreshold the alpha value above which a pixel is interpreted as opaque
@param size of the generated physics body
*/
@available(iOS 8.0, *)
public /*not inherited*/ init(texture: SKTexture, alphaThreshold: Float, size: CGSize)
因此,代碼將是:
pipeUp.physicsBody = SKPhysicsBody(texture: pipeUp.texture, alphaThreshold: 0.3, size: pipeUp.size)
做筆記,那didBeginContact會觸發多次由於它們是多個聯繫點,因此實際上,您必須在代碼 – Knight0fDragon