2016-07-18 10 views
3
pipeUp.physicsBody = SKPhysicsBody(rectangleOfSize: pipeUp.size) 

in dieser Codierung ich die rectangleOfSize zur Kollisionsphysik Körper verwenden, aber wenn ich für Pixel verwendet werden soll nur die Form des Bildes, was soll ich statt rectangleOfSize benutzen?SpriteKit PhysicsBody nicht rechtwinklige Kollision

+0

Anmerkung Sie, dass didBeginContact mehrere Male ausgelöst wird aufgrund ihrer mehrfachen Kontaktpunkte, müssen Sie dies in Code – Knight0fDragon

Antwort

1

Sie sollten eine CGPath machen, dass die Form des Objekts ist, und verwenden Sie SKPhysicsBody ‚s init(polygonFromPath path: CGPath) als described here

0

Sie können eine Physik Körper schaffen, basierend auf der Textur:

pipeUp.physicsBody = SKPhysicsBody(texture:pipeUp.texture) 

Es wird erstellen eine Alpha-Maske Textur für Sie, so dass jedes Pixel, das eine Alpha 0 hat, wird nicht in den Körper der Physik enthalten.

Edit:

@classenApps machte mir klar, ich eine Erweiterung vorgenommen, dies zu tun, also werde ich es für die Antwort hinzufügen richtig. Parameter wie folgt aus::

extension SKPhysicsBody 
{ 
    convenience init(texture: SKTexture) 
    self.init(texture:texture,size:texture.size()) 
} 
0

würde ich KnightOfDragon Methode mit der Zugabe des size verwenden

pipeUp.physicsBody = SKPhysicsBody(texture: pipeUp.texture, size: pipeUp.size) 

Ich glaube, es ist/verwendet, um ein Speicherleck die CGPath mit sein.

+0

tatsächlich behandeln, ist Ihre Art und Weise, es zu tun, basierend auf AppleDocs, habe ich eine Erweiterung, die es ohne die Größe tut – Knight0fDragon

0

Wenn Sie die Textur explizit sagen, was zu verwenden alphaThreshold, können andere Lösung:

/** 
    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) 

So wird der Code sein:

pipeUp.physicsBody = SKPhysicsBody(texture: pipeUp.texture, alphaThreshold: 0.3, size: pipeUp.size)