无法检测SKSpritNode(Swift Xcode)的联系人
我有一个简单的游戏,我用Swift为iOS编写。在游戏中,角色需要收集物品。我在Swift文件中为主要玩家设置了以下内容:无法检测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
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,但仍然没有乐趣。你说我的手机是玩家是什么意思?我没有对抗。恰恰相反。我读过他们,认为我明白了,但很明显,我没有,我正在寻求一些建议。无论如何,我现在就结束这个话题。