gpt4 book ai didi

swift - 为什么我的 didBeginContact 函数检测到太多碰撞?

转载 作者:可可西里 更新时间:2023-11-01 01:35:37 26 4
gpt4 key购买 nike

我的 didBeginContact 函数检测到两个 SKSpriteNode 之间的大约 60 次碰撞,而实际上应该只有一个。

func didBeginContact(contact: SKPhysicsContact) {
let firstBody = contact.bodyA
let secondBody = contact.bodyB
if firstBody.categoryBitMask == bulletCategory && secondBody.categoryBitMask == dragonCategory || firstBody.categoryBitMask == dragonCategory && secondBody.categoryBitMask == bulletCategory{

print("collision happened")
}
}

当节点开始接触时,控制台会多次打印“发生碰撞”。

这是我如何为每个 SKSpriteNode 声明物理体

dragonNode.physicsBody = SKPhysicsBody(texture: dragonNode.texture!, size: CGSizeMake(dragonNode.size.width, dragonNode.size.height))
dragonNode.physicsBody?.affectedByGravity = false
dragonNode.physicsBody?.dynamic = true
dragonNode.physicsBody?.categoryBitMask = dragonCategory
dragonNode.physicsBody?.collisionBitMask = bulletCategory
dragonNode.physicsBody?.contactTestBitMask = bulletCategory

bulletNode.physicsBody = SKPhysicsBody(texture: texture, size: texture.size())
bulletNode.physicsBody?.affectedByGravity = false
bulletNode.physicsBody?.dynamic = true
bulletNode.physicsBody?.categoryBitMask = bulletCategory
bulletNode.physicsBody?.collisionBitMask = dragonCategory
bulletNode.physicsBody?.contactTestBitMask = dragonCategory

这是我为完成游戏而需要修复的最后一件事,所以如果有人能提供帮助那就太好了!

最佳答案

这是因为理论上您的游戏以每秒 60 帧的速度运行。所以它每 60 秒检测一次碰撞并打印警告。您还没有输入任何代码来停止检测此碰撞。你总是可以在对象上放一个标志

dragonNode.collided = true

然后检测碰撞和标志

if (firstBody.categoryBitMask == bulletCategory && secondBody.categoryBitMask == dragonCategory || firstBody.categoryBitMask == dragonCategory && secondBody.categoryBitMask == bulletCategory) && dragonNode.collided != true {
dragonNode.collided = true
print("collision happened")
}

这样碰撞只会触发一次

关于swift - 为什么我的 didBeginContact 函数检测到太多碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38024904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com