首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雪碧试剂盒中的碰撞检测

雪碧试剂盒中的碰撞检测
EN

Stack Overflow用户
提问于 2014-05-06 01:09:06
回答 1查看 524关注 0票数 1

我正在创建一个游戏,将需要使用大量的碰撞检测,我只是学习它今天。

现在我有两个SKSpriteNodes,但其中一个是SKNode的子代。没有父级的SKSpriteNode称为character,带有父级的精灵称为buildingStructure

现在character的分类是static const uint32_t playerCategory = 0x1 << 20;buildingStructure的分类是_buildingStructureCategory = 0x1 << 0;buildingStructure的分类是通过@property设置在另一类map.m中的。

变量正确传递给另一个名为main.m的类(character类别是在这里设置的)。我用一种方法创建character,设置他的物理身体、位置等等。

character__'s性质

代码语言:javascript
复制
character.name = @"character";
character.size = CGSizeMake(250, 400);
character.zPosition = 500;
character.position = CGPointMake(self.scene.size.width/2, self.scene.size.height/2+200);
character.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:character.size];
character.physicsBody.restitution = 0;
character.physicsBody.density = 0.1;
character.physicsBody.allowsRotation = NO;
character.physicsBody.categoryBitMask = playerCategory;
character.physicsBody.collisionBitMask = categoryBitManager.buildingStructureCategory;

buildingStructure__'s性质

代码语言:javascript
复制
buildingStructure.name = @"buildingStructure";
buildingStructure.position = CGPointMake(building.position.x, building.position.y);
buildingStructure.size = CGSizeMake(500, 400);
buildingStructure.physicsBody.dynamic = NO;

buildingStructure.physicsBody.categoryBitMask = _buildingStructureCategory;

另一方面,buildingStructure没有一个集合physicsBody,因为我希望character通过buildingStructure,但我也希望它能够检测character何时“在buildingStructure的顶部”执行一个操作。

由于buildingStructure没有定义的physicsBody,这是什么导致didBeginContact:contact不识别碰撞接触?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-06 01:45:15

默认情况下,physicsBody属性的SKNode (或子类)是nil。是的,给buildingStructure一个物理主体,并正确地配置它以实现所期望的行为。

要想在两个物理体之间得到想要的行为,首先要理解存在‘冲突’'contacts'SKPhysicsBody有两个名为collisionBitMaskcontactTestBitMask.的属性

对于collisionBitMask,默认值是0xFFFFFFF(所有位集),对于contactTestBitMask,默认值是0x00000000 (所有位被清除)。你可以看到,在默认情况下,每一个物理物体都会与他人发生碰撞,但不会有任何接触。

碰撞是你想要物理模拟影响身体的地方,在那里,接触是你想要被通知的地方,这样你就可以做一些事情。所以这会叫didBeginContact:

我建议将两个物体的collisionBitMask设置为0(因此它们的物理不受影响并相互传递)。然后将字符的contactTestBitMask属性设置为像这样的建筑物的属性-

代码语言:javascript
复制
character.physicsBody.contactTestBitMask = categoryBitManager.buildingStructureCategory;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23484406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档