我正在尝试编写一个单词碰撞检测游戏的代码,问题是在我添加矩形作为单词的背景之前,我所有的代码都是正常的,我可以检测到碰撞并采取相应的行动。
问题是,在我添加矩形作为单词的背景之前,我所有的代码都能正常工作,我可以检测到碰撞并采取相应的行动。
这是我创建word的函数。
func giveWords() {
randomIndex = Int.random(in: 0 ..< lastWords.count)
word = SKLabelNode(text: "\(lastWords[randomIndex])")
lastWords.remove(at: randomIndex)
word.fontSize = 17
word.name = "word"
word.fontName = "HelveticaNeue-Bold"
backgroundWord = SKShapeNode(rect: CGRect(x: 0, y: 0, width: (word.frame.width + 3), height: (word.frame.height + 2)), cornerRadius: 4)
word.physicsBody? = SKPhysicsBody(rectangleOf: self.size)
word.physicsBody?.collisionBitMask = 0
word.physicsBody?.contactTestBitMask = 0
word.physicsBody?.categoryBitMask = 1
word.physicsBody?.affectedByGravity = false
word.physicsBody?.isDynamic = false
word.position = CGPoint(x:(backgroundWord.position.x + word.frame.width/2 + 1 ), y: (backgroundWord.position.y) + 4)
let number = Int.random(in: 1 ..< 9)
backgroundWord.position = CGPoint(x: (50 * number), y: 450)
word.zPosition = 3
backgroundWord.zPosition = 3
backgroundWord.addChild(word)
addChild(backgroundWord)
}
这是检查碰撞的代码。
func checkCollision() {
enumerateChildNodes(withName: "word") { (node, _) in
let word = node as! SKLabelNode
if self.basketNode.frame.intersects(word.frame) {
if self.similarWord.contains(word.text!) {
self.score += 1
self.scoreLabel.text = "\(self.score)"
self.takeWord.append(word.text!)
self.run(self.trueSound)
self.backgroundWord.removeFromParent()
} else {
self.run(self.falseSound)
self.health -= 1
self.healthLabel.text = "HP: \(self.health)"
self.backgroundWord.removeFromParent()
}
}
}
}
我试过物理碰撞,但我没有处理,所以我选择了这个算法。
函数调用后。self.basketNode.frame.intersects(word.frame)
返回false,这意味着没有检测到碰撞。
我无法处理为什么没有检测到碰撞。
先谢谢你
我解决了,下面是答案和原因。
背后的原因是,也是我没有检测到的原因。self.basketNode.frame.intersects(word.frame)
很简单。
我试图检测word的帧交点,但我应该检测它的父节点,也就是背景。所以我把word改成了背景,然后创建了一个帮助我访问word的let。这里是答案...
func checkCollision() {
enumerateChildNodes(withName: "word") { (node, _) in
let background = node as! SKShapeNode
if self.basketNode.frame.intersects(background.frame) {
if let word = background.childNode(withName: "string word") as? SKLabelNode {
if self.similarWord.contains(word.text!) {
self.score += 1
self.scoreLabel.text = "\(self.score)"
self.takeWord.append(word.text!)
self.run(self.trueSound)
word.removeFromParent()
background.removeFromParent()
} else {
self.run(self.falseSound)
self.health -= 1
self.healthLabel.text = "HP: \(self.health)"
word.removeFromParent()
background.removeFromParent()
}
}
}
}
另外,我从苹果的文档中得到了帮助
https:/developer.apple.comdocumentationspritekitsknode1483024-enumeratechildnodes。
谢谢你的努力,我正在继续我的项目。