SpriteKit PhysicsBody非矩形碰撞

时间:2016-07-18 12:36:02

标签: ios xcode sprite-kit swift2

    pipeUp.physicsBody = SKPhysicsBody(rectangleOfSize: pipeUp.size)

在这个编码中我使用rectangleOfSize作为碰撞物理体,但是如果我想按像素使用图像的形状,我应该使用什么而不是rectangleOfSize

4 个答案:

答案 0 :(得分:1)

你应该制作一个CGPath形状的对象,然后使用SKPhysicsBody init(polygonFromPath path: CGPath)作为described here

答案 1 :(得分:0)

您可以根据纹理创建物理实体:

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

它将为您创建一个alpha蒙版纹理,因此任何具有alpha 0的像素都不会包含在物理实体中。

编辑:

@classenApps让我意识到我做了一个扩展来做到这一点,所以我会添加它以使答案正确。

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

答案 2 :(得分:0)

我会使用KnightOfDragon的方法添加size:参数,如下所示:

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

我相信使用CGPath已经/曾经是内存泄漏。

答案 3 :(得分:0)

如果你需要明确告诉纹理使用什么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)