我正在尝试制作一个概述精灵节点的物理体,例如:而不是使用SKPhysicsBody(circleOfSize ...),只是获得圆形或使用SKPhysicsBody(RectangleOfSize ...),但我认为有一个“AlphaMask”或类似的东西,如果我的精灵节点是杯子的形状或“V”形状,允许物体进入敞开的顶部,并陷入“V”?提前谢谢:)
所以第一张照片是我在尝试矩形时得到的,第二张照片是我需要的类型!
答案 0 :(得分:3)
我认为最好的解决方案可能是建立一条路径,然后制作:
SKPhysicsBody.init(edgeLoopFrom: path!)
这是官方的源文档:
/**
Creates an edge loop from a path. A loop is automatically created by joining the last point to the first. The path must have no self intersection. Edges have no volume and are intended to be used to create static environments. Edges can collide with body's of volume, but not with each other.
@param path the path to use
*/
public /*not inherited*/ init(edgeLoopFrom path: CGPath)
使用此解决方案,您可以在CGPath
构造(' V'形状)后精确定义您的形状。
答案 1 :(得分:2)
如果您正在使用PNG图像(或任何支持清晰像素的图像类型),您只需从纹理中创建physicsBody
:
let sprite = SKSpriteNode(imageNamed: "Spaceship")
sprite.physicsBody = SKPhysicsBody(texture: sprite.texture!, size: sprite.texture!.size())
这会根据纹理的透明和彩色像素创建physicsBody
,以便在匹配形状时发挥最佳效果。
请注意,使用此功能并不总是100%准确,如果使用高度复杂的纹理(滞后,内存问题等等),可能会导致问题。
根据Apples Docs:
为物理选择形状时 身体,不要过于精确。 更复杂的形状需要更多的工作才能被正确模拟。