无法检测SKSpritNode(Swift Xcode)的联系人

无法检测SKSpritNode(Swift Xcode)的联系人,swift,xcode,sprite-kit,collision-detection,skspritenode,Swift,Xcode,Sprite Kit,Collision Detection,Skspritenode,我有一个简单的游戏,我用Swift为iOS编写。在游戏中,角色需要收集物品。我在Swift文件中为主要玩家设置了以下内容: import SpriteKit struct ColliderType { static let Player: UInt32 = 1 static let Ground: UInt32 = 2 static let Collectables: UInt32 = 3 } class Player: SKSpriteNode { fun

我有一个简单的游戏,我用Swift为iOS编写。在游戏中,角色需要收集物品。我在Swift文件中为主要玩家设置了以下内容:

import SpriteKit

struct ColliderType {
    static let Player: UInt32 = 1
    static let Ground: UInt32 = 2
    static let Collectables: UInt32 = 3
}

class Player: SKSpriteNode {

    func initialize() {

        var walk = [SKTexture]()

        for i in 1...16 {
            let name = "Kidwalk\(i)"
            walk.append(SKTexture(imageNamed: name))
        }

        let walkAnimation = SKAction.animate(with: walk, timePerFrame: 0.095, resize: true, restore: true)

        self.name = "Player"
        self.physicsBody = SKPhysicsBody(rectangleOf: self.size)
        self.physicsBody?.affectedByGravity = true
        self.physicsBody?.allowsRotation = false
        self.physicsBody?.categoryBitMask = ColliderType.Player
        self.physicsBody?.collisionBitMask = ColliderType.Ground | ColliderType.Collectables
        self.position = CGPoint(x: 0, y: 0)
        self.zPosition = 5
        self.run(SKAction.repeatForever(walkAnimation))
        self.xScale = CGFloat(0.4)
        self.yScale = CGFloat(0.4)
    }

    func jump() {
        self.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
        self.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 500))
    }

}
在主gameplaysecene.swift文件中,我设置了以下常量:

let phone = SKSpriteNode()
然后我创建对象,如下所示:

func createPhone() {
     var ring = [SKTexture]()

     for i in 1...7 {
     let name = "phone\(i)"
     ring.append(SKTexture(imageNamed: name))
     }

     let ringAnimation = SKAction.animate(with: ring, timePerFrame: 0.095, resize: true, restore: true)

     phone.name = "Phone"
     phone.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: phone.size.width / 2, height: phone.size.height / 2))
     phone.physicsBody?.affectedByGravity = true
     phone.physicsBody?.allowsRotation = false
     phone.physicsBody?.categoryBitMask = ColliderType.Player
     phone.physicsBody?.collisionBitMask = ColliderType.Ground | ColliderType.Collectables
     phone.position = CGPoint(x: 300, y: -50)
     phone.zPosition = 5
     phone.run(SKAction.repeatForever(ringAnimation))
     phone.xScale = CGFloat(0.7)
     phone.yScale = CGFloat(0.7)

        let move = SKAction.moveTo(x: -(self.frame.size.width * 2), duration: 15)

        let remove = SKAction.removeFromParent()

        let sequence = SKAction.sequence([move, remove])

        phone.run(sequence)

        addChild(phone)
    }
我正在调用顶部的didMove函数中的createPhone()

最后,我为碰撞检测做了如下设置:

func didBegin(_ contact: SKPhysicsContact) {
        var firstBody = SKPhysicsBody();
        var secondBody = SKPhysicsBody();

        if contact.bodyA.node?.name == "Player" {
            firstBody = contact.bodyA;
            secondBody = contact.bodyB;
        } else {
            firstBody = contact.bodyB;
            secondBody = contact.bodyA;
        }

        if firstBody.node?.name == "Player" && secondBody.node?.name == "Ground" {
            canJump = true;
            print("canjump")
        } else if firstBody.node?.name == "Player" && secondBody.node?.name == "Phone" {
            print("Collect)
        }
    }
显然,有一些根本性的错误,因为地面和播放器之间的碰撞被检测到,但手机和播放器之间的碰撞没有被检测到

我相信我已经正确地设置了结构,并且我已经检查了所有节点的冲突位掩码和类别,我无法找出哪里出了问题


任何帮助都将不胜感激。

此外,您的手机是一款播放器。最后,您从未设置过contactBitMask,只设置了Collision谢谢您的评论。我查了一下bit masks,我让它在其他应用程序上运行,但这里有一个空白。我已将contactBitMask添加到手机中,并将其设置为ColliderType.Player,同时将播放器设置为ColliderType.phone,但仍然没有乐趣。你说我的手机是玩家是什么意思?我没有对抗。恰恰相反。我读过他们,认为我明白了,但很明显,我没有,我正在寻求一些建议。无论如何,我现在就结束这个话题。