为什么SKPhysicsBody -bodyWithEdgeLoopFromRect对碰撞没有反应?



我有一堆积木(就像《愤怒的小鸟》),当炮弹击中它们时,它们会像你想象的那样倒地。然而,这只有在我像这样创建physicsBody时才有效:

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 bug,还是我错过了什么?

谢谢,

布莱恩

查看SKPhysicsBody类参考。

您将发现用于创建physicsBodies的各种类方法列在两类中,即基于卷的基于边缘的物理体。

bodyWithRectangleOfSize:返回基于卷的physicsBody,而bodyWithEdgeLoopFromRect返回基于边的physicsBody。

在同一文档的概述中,两者的区别解释为:

Sprite Kit支持两种物理实体,基于体积的实体还有边缘体。当你创造一个物理物体,它的种类,大小,和形状由您调用的构造函数方法决定。一个边缘体没有质量或体积,不受系统中的力或冲动。基于边缘的主体用于在你的物理中表示无体积边界或空心空间模拟。相反,基于体积的体被用来表示具有质量和体积的物体

最新更新