pipeUp.physicsBody = SKPhysicsBody(rectangleOfSize: pipeUp.size)
在这个编码中我使用rectangleOfSize
作为碰撞物理体,但是如果我想按像素使用图像的形状,我应该使用什么而不是rectangleOfSize
?
答案 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)