Spritekit 碰撞检测无法正常工作

Posted

技术标签:

【中文标题】Spritekit 碰撞检测无法正常工作【英文标题】:Spritekit Collision Detection not functioning properly 【发布时间】:2014-04-21 10:33:48 【问题描述】:

我正在使用 SpriteKit 构建游戏,但在碰撞检测方面遇到了一些问题。我有SKSpriteNodePlayerEnemy 的两个子类。它们都应该检测到彼此的碰撞。这是我初始化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 碰撞检测无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

未检测到 SpriteKit 碰撞

未检测到 SpriteKit 碰撞

Monogame碰撞检测无法正常工作

基于 SpriteKit 中的碰撞检测更新分数的问题

未检测到 spritekit 物理碰撞

SpriteKit 中的碰撞检测