我有一堆积木(想想“愤怒的小鸟”),当一个弹丸击中它们时,它们会像你期待的那样摔倒。但是,这只有在我创建物理实体时才有效:
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
但是,如果我像这样创建物理体:
CGRect r = CGRectMake(-self.size.width/2, -self.size.height/2, self.size.width, self.size.height);
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:r];
然后碰撞就在那里,但是块不受它的影响。射弹从弹跳中反弹,但不会导致滑块移动。我的categoryBitMask和collisionBitMask是正确的 - 它们与-bodyWithRectangleOfSize一起使用,但-bodyWithEdgeLoopFromRect没有。
这是一个SpriteKit错误,还是我错过了什么?
谢谢,
-Brian
答案 0 :(得分:2)
查看SKPhysicsBody Class Reference。
您会发现创建physicsBodies的各种类方法分为两类,即基于体积的和基于边缘的物理体。
bodyWithRectangleOfSize:
返回基于体积的physicsBody,而bodyWithEdgeLoopFromRect
返回基于边缘的physicsBody。
在同一文件的概述中,两者之间的区别解释如下:
Sprite Kit支持两种物理实体,即基于体积的实体 和基于边缘的身体。当你创建一个物理体,它的种类,大小, 和形状由您调用的构造方法确定。 <强>一种 基于边缘的身体没有质量或体积,并且不受影响 系统中的力或冲动。基于边缘的物体习惯于 表示物理中的无体积边界或空心空间 模拟。相反,基于体积的物体用于表示 具有质量和体积的物体。