contactTestBitMask没有使用Swift检测SpriteKit中的didBeginContact(Logs)

时间:2016-08-03 18:54:32

标签: swift xcode

我正在制作一个简单的spriteKit游戏,我已经设置了所有的物理实体。我添加了正确的categoryBitMasks和ContactTestBitMask来检测联系人。

当我运行应用程序时,我有联系但它没有显示在我添加了print(“联系人”)的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函数中设置速度

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

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

2 个答案:

答案 0 :(得分:0)

您需要设置3件事。

physicsBody.categoryBitMask
physicsBody.contactTestBitMask
physicsBody.collisionBitMask

还要确保设置SKPhysicsContactDelegate。你的课程在顶部

后应该有SKPhysicsContactDelegate
Class GameScene : SKScene, SKPhysicsContactDelegate {

确保你的didMoveToView

中有这个
self.physicsWorld.contactDelegate = self

希望你的帮助!

答案 1 :(得分:0)

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

我所做的就是擦除

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

重新打字。哇,很奇怪,但它有效。我已经注意到这个问题与其他问题(重新键入代码使其工作)。