2014-07-17 36 views
0

我有一堆积木(想想愤怒的小鸟),当一个弹丸击中它们时,它们会像你期望的那样坠落。SKPhysicsBody -bodyWithEdgeLoopF​​romRect为什么不对碰撞做出反应?

self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size]; 

但是,如果我创建了物理体这样的:不过,如果我创建像这样的physicsBody这仅适用

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

回答

2

看一看的SKPhysicsBody Class Reference

你会发现,创建physicsBodies各种类的方法分为两类上市,即基于卷的基于边缘的物理机构。

bodyWithRectangleOfSize:返回一个基于音量的physicsBody,而bodyWithEdgeLoopFromRect返回一个基于边缘的physicsBody。

在同一文件的概述,两者之间的差异进行说明为:

精灵工具包支持两种物理机构,基于体积的体 和基于边缘的机构。当你创建一个物理体时,它的种类,尺寸, 和形状是由你调用的构造函数方法决定的。 An 基于边缘的物体没有质量或体积,并且不受系统中的力或冲击影响。基于边缘的物体用于 代表物理模拟中的无体积边界或空心空间。相反,基于体积的物体用于表示具有质量和体积的物体。

+1

某处还有解释说明基于边缘的物体不会与其他基于边缘的物体产生接触事件。如果不在参考文献中,那么在SK编程指南中。 – LearnCocos2D

+0

@ LearnCocos2D https://developer.apple.com/documentation/spritekit/skphysicsbody - isDynamic属性控制基于音量的主体是否受重力,摩擦力,与其他对象的碰撞影响... –