Spritekit 碰撞检测无法正常工作
Posted
技术标签:
【中文标题】Spritekit 碰撞检测无法正常工作【英文标题】:Spritekit Collision Detection not functioning properly 【发布时间】:2014-04-21 10:33:48 【问题描述】:我正在使用 SpriteKit 构建游戏,但在碰撞检测方面遇到了一些问题。我有SKSpriteNode
、Player
和Enemy
的两个子类。它们都应该检测到彼此的碰撞。这是我初始化Player
对象的physicsBody
的方法:
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
self.physicsBody.affectedByGravity = NO;
self.physicsBody.dynamic = NO;
self.physicsBody.usesPreciseCollisionDetection = YES;
self.physicsBody.categoryBitMask = playerCategory;
self.physicsBody.collisionBitMask = enemyCategory;
self.physicsBody.contactTestBitMask = enemyCategory;
这就是我如何初始化Enemy
对象的physicsBody
:
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
self.physicsBody.affectedByGravity = NO;
self.physicsBody.dynamic = NO;
self.physicsBody.usesPreciseCollisionDetection = NO;
self.physicsBody.categoryBitMask = enemyCategory;
self.physicsBody.collisionBitMask = playerCategory;
self.physicsBody.contactTestBitMask = playerCategory;
我有我的GameScene
实现SKPhysicsContactDelegate
协议,我在它的初始化中有这个:
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0);
self.physicsWorld.contactDelegate = self;
然而,didBeginContact
方法并没有被调用。在场景中创建对象后,我尝试初始化physicsBodies
,但仍然没有。我做错了什么?
更新 1
这是生成bitMasks
的代码,它位于Common.h
文件中,该文件是在Prefix.pch
文件中导入的。
static const uint32_t enemyCategory = 0x1 <<0;
static const uint32_t playerCategory = 0x1 <<1;
【问题讨论】:
您在哪里以及如何设置位掩码类别值?请发布一些与此相关的代码。 @akashg 我编辑了这个问题。 将动态属性设置为YES @akashg 我做到了。现在可以使用了,谢谢! 【参考方案1】:您需要为您的节点将physicsBody.dynamic 设置为YES。
来自 SKPhysicsBody 类参考:
动态
一个布尔值,指示物理体是否是 被物理模拟所感动。
默认值为是。如果值为 NO,则物理体 忽略施加在它上面的所有力和冲动。
【讨论】:
以上是关于Spritekit 碰撞检测无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章