如果我创建一个SKPhysicsBody并将其添加到SKSpriteNode,如下所示,则碰撞检测可以正常使用下面的楼层对象。
let myObjectBody = SKPhysicsBody(circleOfRadius: 100)
但是,如果我使用应用它的SKSpriteNode的纹理创建PhysicsBody,则碰撞不起作用。虽然确实注册联系,但该对象只是落在了地板上。
let myObjectBody = SKPhysicsBody(texture: myObject.texture!, alphaThreshold: 0, size: myObject.texture!.size())
重要提示:如果我将show physics设置为true:
skView.showsPhysics = true
然后物理轮廓完美匹配精灵形状的轮廓,这是从png生成的。
将physicsBody以下列方式添加到对象中,然后添加到场景中。
let myTexture = SKTexture(imageNamed: "myImage")
let myObject = SKSpriteNode(texture: myTexture)
myObject.xScale = 0.2
myObject.yScale = 0.2 //The image is big to allow zooming
let myObjectBody = SKPhysicsBody(texture: myObject.texture!, alphaThreshold: 0, size: myObject.texture!.size())
myObject.physicsBody = myObjectBody
myWorld.addChild(myObject)
答案 0 :(得分:0)
好的,我想出了如何使这项工作。
我对showsPhysics属性感到困惑。我需要将物理对象的大小设置为与图像相同的比例。
所以,这有效:
let myObjectSize = CGSize(width: myObject.texture!.size().width * 0.2, height: myObject.texture!.size().height * 0.2)
let leafBody = SKPhysicsBody(texture: myObject.texture!, alphaThreshold: 0, size: myObjectSize)
这看起来很自然,但让我失望的是,当开启showsPhysics时,可视化(蓝色)物理体的效果比它产生的效果小五倍。因此图像的蓝色形状位于实际图像内(迷你版)。上面我的问题中的代码创建了一个漂亮的蓝色可视化物理实体,看似与图像匹配,但实际上它太大了。
答案 1 :(得分:0)
这是模拟器的问题。降级到iOS 12.x或使用物理设备似乎都可以解决问题。