在使用 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 中的多个场景,从第二个和第一个场景的不同 Sprite 节点类型调用 touchesBegan