在使用 Swift 的 SpriteKit 中的 didBeginContact(日志)中未检测到 contactTestBitMask

Posted

技术标签:

【中文标题】在使用 Swift 的 SpriteKit 中的 didBeginContact(日志)中未检测到 contactTestBitMask【英文标题】:contactTestBitMask not detecting in didBeginContact (Logs) in SpriteKit with Swift 【发布时间】:2016-08-03 18:54:31 【问题描述】:

我正在制作一个简单的 spriteKit 游戏,并且我已经设置了所有的 PhysicsBodies。我添加了正确的 categoryBitMasks 和 ContactTestBitMask 来检测接触。

当我运行应用程序时,我有联系,但它没有显示在我添加 print(“contact”) 的 didBeginContact 的日志中

我似乎无法理解这一点。我可能已经查看了与此最相似的所有问题和教程。

我尝试了两种不同的方法

enum ColliderType : UInt32 
    case None   = 0
    case All    = 0xFFFFFFFF
    case enemy  = 0b001
    case hero   = 0b010
    case screen = 0b100

let heroCategory :UInt32   = 0x1 << 0
let screenCategory:UInt32  = 0x1 << 1
let enemyCategory:UInt32   = 0x1 << 2
let scoreCategory:UInt32   = 0x1 << 3

我的联系方式很奇怪,但它没有打印在日志中。

我有一个移动的背景,移动的敌人向英雄靠近。英雄移动躲避敌人。

我尝试添加一个“gameOver”功能,看看它是否会通过设置停止游戏

if self.movingParts.speed > 0 
        self.movingParts.speed = 0

并在 touchesBegan 函数中设置速度

如果需要,我可以上传代码。请告诉我。

感谢任何形式的帮助。谢谢

【问题讨论】:

【参考方案1】:

您需要设置 3 件事。

physicsBody.categoryBitMask
physicsBody.contactTestBitMask
physicsBody.collisionBitMask

还要确保设置 SKPhysicsContactDelegate。你的课后应该有 SKPhysicsContactDelegate

Class GameScene : SKScene, SKPhysicsContactDelegate 

并确保你的 didMoveToView 中有这个

self.physicsWorld.contactDelegate = self

希望对您有所帮助!

【讨论】:

感谢您的回答。我有你添加的所有信息。就像我提到的那样,我运行该应用程序时没有错误或警告。 哦,好的,我需要查看您有“打印联系人”的代码【参考方案2】:

好吧,17 天后,我终于找到了一个真正不是我的错的解决方案。

我所做的只是擦除

func didBeginContact(contact: SKPhysicsContact) 
    print("contact")

然后重新输入。哇,很奇怪,但它起作用了。我注意到这个问题与其他问题(重新输入代码以使其工作)。

【讨论】:

以上是关于在使用 Swift 的 SpriteKit 中的 didBeginContact(日志)中未检测到 contactTestBitMask的主要内容,如果未能解决你的问题,请参考以下文章

使用 spritekit swift 在 swift 中为游戏创建主菜单

如何将SpriteKit中的单个游戏场景添加到普通的单视图Swift应用程序中

Swift SpriteKit 在 x 轴上旋转节点

Swift:Spritekit 中的多个场景,从第二个和第一个场景的不同 Sprite 节点类型调用 touchesBegan

SpriteKit问题与Swift中的SKShader动画

如何从 Swift SpriteKit 中的另一个 SKScene 访问变量