为什么没有SKPhysicsBody -bodyWithEdgeLoopF​​romRect对碰撞作出反应?

时间:2014-07-17 13:31:40

标签: sprite-kit collision-detection skphysicsbody

我有一堆积木(想想“愤怒的小鸟”),当一个弹丸击中它们时,它们会像你期待的那样摔倒。但是,这只有在我创建物理实体时才有效:

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一起使用,但-bodyWithEdgeLoopF​​romRect没有。

这是一个SpriteKit错误,还是我错过了什么?

谢谢,

-Brian

1 个答案:

答案 0 :(得分:2)

查看SKPhysicsBody Class Reference

您会发现创建physicsBodies的各种类方法分为两类,即基于体积的基于边缘的物理体。

bodyWithRectangleOfSize:返回基于体积的physicsBody,而bodyWithEdgeLoopFromRect返回基于边缘的physicsBody。

在同一文件的概述中,两者之间的区别解释如下:

  

Sprite Kit支持两种物理实体,即基于体积的实体   和基于边缘的身体。当你创建一个物理体,它的种类,大小,   和形状由您调用的构造方法确定。 <强>一种   基于边缘的身体没有质量或体积,并且不受影响   系统中的力或冲动。基于边缘的物体习惯于   表示物理中的无体积边界或空心空间   模拟。相反,基于体积的物体用于表示   具有质量和体积的物体。