如何用孔创建SKPhysicsBody?

时间:2015-01-22 22:23:47

标签: ios swift sprite-kit skphysicsbody

我想知道如何创建一个更复杂的SKPhysicsyBody?我想再试一下黑色部分。

enter image description here

我使用PaintCode将此形状导出到CG Rect。

var barrierpath2Path = UIBezierPath()
        barrierpath2Path.moveToPoint(CGPointMake(52, 26))
        barrierpath2Path.addLineToPoint(CGPointMake(52, 26))
        barrierpath2Path.addCurveToPoint(CGPointMake(26, 52), controlPoint1: CGPointMake(52, 40.36), controlPoint2: CGPointMake(40.36, 52))
        barrierpath2Path.addLineToPoint(CGPointMake(26, 52))
        barrierpath2Path.addCurveToPoint(CGPointMake(0, 26), controlPoint1: CGPointMake(11.64, 52), controlPoint2: CGPointMake(0, 40.36))
        barrierpath2Path.addLineToPoint(CGPointMake(0, 26))
        barrierpath2Path.addCurveToPoint(CGPointMake(26, 0), controlPoint1: CGPointMake(0, 11.64), controlPoint2: CGPointMake(11.64, 0))
        barrierpath2Path.addLineToPoint(CGPointMake(26, 0))
        barrierpath2Path.addCurveToPoint(CGPointMake(52, 26), controlPoint1: CGPointMake(40.36, 0), controlPoint2: CGPointMake(52, 11.64))
        barrierpath2Path.closePath()
        barrierpath2Path.moveToPoint(CGPointMake(46.8, 26))
        barrierpath2Path.addLineToPoint(CGPointMake(46.8, 26))
        barrierpath2Path.addCurveToPoint(CGPointMake(39, 18.2), controlPoint1: CGPointMake(46.8, 21.69), controlPoint2: CGPointMake(43.31, 18.2))
        barrierpath2Path.addLineToPoint(CGPointMake(39, 18.2))
        barrierpath2Path.addCurveToPoint(CGPointMake(31.2, 26), controlPoint1: CGPointMake(34.69, 18.2), controlPoint2: CGPointMake(31.2, 21.69))
        barrierpath2Path.addLineToPoint(CGPointMake(31.2, 26))
        barrierpath2Path.addCurveToPoint(CGPointMake(39, 33.8), controlPoint1: CGPointMake(31.2, 30.31), controlPoint2: CGPointMake(34.69, 33.8))
        barrierpath2Path.addLineToPoint(CGPointMake(39, 33.8))
        barrierpath2Path.addCurveToPoint(CGPointMake(46.8, 26), controlPoint1: CGPointMake(43.31, 33.8), controlPoint2: CGPointMake(46.8, 30.31))
        barrierpath2Path.closePath()
        barrierpath2Path.moveToPoint(CGPointMake(27.3, 14.74))
        barrierpath2Path.addLineToPoint(CGPointMake(27.3, 14.74))
        barrierpath2Path.addCurveToPoint(CGPointMake(19.5, 6.94), controlPoint1: CGPointMake(27.3, 10.43), controlPoint2: CGPointMake(23.81, 6.94))
        barrierpath2Path.addLineToPoint(CGPointMake(19.5, 6.94))
        barrierpath2Path.addCurveToPoint(CGPointMake(11.7, 14.74), controlPoint1: CGPointMake(15.19, 6.94), controlPoint2: CGPointMake(11.7, 10.43))
        barrierpath2Path.addLineToPoint(CGPointMake(11.7, 14.74))
        barrierpath2Path.addCurveToPoint(CGPointMake(19.5, 22.54), controlPoint1: CGPointMake(11.7, 19.05), controlPoint2: CGPointMake(15.19, 22.54))
        barrierpath2Path.addLineToPoint(CGPointMake(19.5, 22.54))
        barrierpath2Path.addCurveToPoint(CGPointMake(27.3, 14.74), controlPoint1: CGPointMake(23.81, 22.54), controlPoint2: CGPointMake(27.3, 19.05))
        barrierpath2Path.closePath()
        barrierpath2Path.moveToPoint(CGPointMake(27.3, 37.26))
        barrierpath2Path.addLineToPoint(CGPointMake(27.3, 37.26))
        barrierpath2Path.addCurveToPoint(CGPointMake(19.5, 29.46), controlPoint1: CGPointMake(27.3, 32.95), controlPoint2: CGPointMake(23.81, 29.46))
        barrierpath2Path.addLineToPoint(CGPointMake(19.5, 29.46))
        barrierpath2Path.addCurveToPoint(CGPointMake(11.7, 37.26), controlPoint1: CGPointMake(15.19, 29.46), controlPoint2: CGPointMake(11.7, 32.95))
        barrierpath2Path.addLineToPoint(CGPointMake(11.7, 37.26))
        barrierpath2Path.addCurveToPoint(CGPointMake(19.5, 45.06), controlPoint1: CGPointMake(11.7, 41.57), controlPoint2: CGPointMake(15.19, 45.06))
        barrierpath2Path.addLineToPoint(CGPointMake(19.5, 45.06))
        barrierpath2Path.addCurveToPoint(CGPointMake(27.3, 37.26), controlPoint1: CGPointMake(23.81, 45.06), controlPoint2: CGPointMake(27.3, 41.57))
        barrierpath2Path.closePath()
        barrierpath2Path.miterLimit = 4;



        monster.physicsBody = SKPhysicsBody(polygonFromPath: barrierpath2Path.CGPath)

但模拟器只显示一个洞(后面是png)?这有什么不对? enter image description here

1 个答案:

答案 0 :(得分:2)

您最有可能想要使用自己的物理主体创建子节点。这将允许一切都拥有各自的物理机构,并且没有任何问题地相互移动

为了进一步详细说明这个答案,您可能还可以使用SKPhysicsBody便利初始化程序从纹理中的alpha值创建物理体。这会导致性能损失,但应该按照您的意愿行事。

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