我在SKScene中有两个不同的固定SKPhysicsBody。两者之间唯一的区别是他们的categoryBitMask。其中有512 categoryBitMask,其他1024SKPhysicsContact中bodyA和bodyB是如何确定的?
static const u_int32_t kWallCategory = 0x1 << 9; //512
static const u_int32_t kStructureCategory = 0x1 << 10; //1024
在我的节目,我有-(void)didBeginContact:(SKPhysicsContact *)contact
称为标准的接触处理程序开始:
-(void)handleContact:(SKPhysicsContact*)contact {
SKPhysicsBody *bodyA = contact.bodyA;
SKPhysicsBody *bodyB = contact.bodyB;
int type1 = contact.bodyA.categoryBitMask;
int type2 = contact.bodyB.categoryBitMask;
在我的计划,我需要确定动态物体与两个固定物体之一之间的接触矢量。为了做到这一点,我访问SKPhysicsContact
CGVector c = contact.contactNormal;
我注意到什么的contactNormal财产,虽然是接触载体是不一致的,我确定这是因为有时SKPhysicsContact的bodyA是定身,有时bodyA是动态的身体。
例如,当子弹(动体)从左侧撞击建筑物(固定体)时,我希望每次接触向量为(-1,0)
。目前,接触矢量有时是(-1,0)
(从左边),有时是(1,0)
(从右边),全部取决于哪个主体contact.bodyA
是。
我的问题:给定所有其他条件相同(物理属性等)什么决定什么是bodyA和什么是bodyB在SKPhysicsContact?
这非常棒。你的结论是,应该总是测试哪个主体是哪个主体(假设它对你的联系处理程序来说很重要),但是一直存在一个问题:总是测试的原因并不是控制什么顺序主体进入该场景。苹果公司并未承诺机构A和B将以*任何确定性顺序 - 您已将其与创建顺序关联起来,但无法保证在所有设备和操作系统版本中都是相同的。 – rickster