gpt4 book ai didi

Swift:因为两次检测到碰撞,分数增加了两倍?

转载 作者:搜寻专家 更新时间:2023-11-01 06:46:02 26 4
gpt4 key购买 nike

我正在快速构建 Sprite 套件游戏,当检测到 2 个节点之间的碰撞时,我需要将分数增加 1。分数存储在名为 animalsCount 的变量中,并输出到标签节点:

    //Score count in stats bar
//Animal score count

animalsCount = 0

animalsCountLabel.text = "\(animalsCount)"
animalsCountLabel.fontSize = 45
animalsCountLabel.fontColor = SKColor.blackColor()
animalsCountLabel.position = CGPoint (x: 630, y: 40)

addChild(animalsCountLabel)

发生碰撞的两个 Sprite 节点是saviorchicken1。现在,我正在使用以下代码记录分数和检测碰撞:

 func didBeginContact(contact: SKPhysicsContact) {

//Chicken1

if (contact.bodyA.categoryBitMask == ColliderType.Savior.rawValue && contact.bodyB.categoryBitMask == ColliderType.Chicken1.rawValue ) {

println("chicken1 contact made")
chicken1.hidden = true
chicken1.setScale(0)

animalsCount++
animalsCountLabel.text = "\(animalsCount)"


} else if (contact.bodyA.categoryBitMask == ColliderType.Chicken1.rawValue && contact.bodyB.categoryBitMask == ColliderType.Savior.rawValue) {

println("chicken1 contact made")
chicken1.hidden = true
chicken1.setScale(0)

}

else if 语句中的分数没有增加,因为它不会在我的游戏中发生。

问题是每次 saviorchicken1 发生碰撞时,animalsCount 都会增加 2,而不是 1。

经过一些故障排除后,我发现这不是因为两个碰撞体的分数都在增加。事实并非如此,因为只有 1 行代码可以满足。这是唯一满足的行:

if (contact.bodyA.categoryBitMask == ColliderType.Savior.rawValue)

分数上升了 2 而不是 1,因为 savior 似乎从 chicken1 上“反弹”,所以 contact.bodyA.categoryBitMask设置为等于 ColliderType.Savior.rawValue TWICE 每次碰撞似乎发生一次。

我不知道如何解决这个问题。我该怎么做才能让碰撞只被检测到一次,所以分数只增加一次?

最佳答案

我最终使用一个控制 if 语句的 Int 变量解决了这个问题,因此在 sprite 节点循环通过并重置变量之前只能检测一次碰撞。

我声明了一个名为 chickenHasBeenGrabbed 的变量,并将其初始设置为 0。第一次检测到碰撞后,我将 chickenHasBeenGrabbed 设置为 1。只有在 chickenHasBeenGrabbed 设置回 0 后才能再次检测到碰撞:

func didBeginContact(contact: SKPhysicsContact) {

//Chicken1

if chickenHasBeenGrabbed == 0 {

if (contact.bodyA.categoryBitMask == ColliderType.Savior.rawValue && contact.bodyB.categoryBitMask == ColliderType.Chicken1.rawValue ) {

println("chicken1 contact made")
chicken1.hidden = true
chicken1.setScale(0)

animalsCount += 1
animalsCountLabel.text = "\(animalsCount)"

chickenHasBeenGrabbed = 1


} else if (contact.bodyA.categoryBitMask == ColliderType.Chicken1.rawValue && contact.bodyB.categoryBitMask == ColliderType.Savior.rawValue) {

println("chicken1 contact made")
chicken1.hidden = true
chicken1.setScale(0)

}
}

else if chickenHasBeenGrabbed == 1 {

if (contact.bodyA.categoryBitMask == ColliderType.Savior.rawValue && contact.bodyB.categoryBitMask == ColliderType.Chicken1.rawValue ) {

println("nothing to do; chicken was already grabbed!")


} else if (contact.bodyA.categoryBitMask == ColliderType.Chicken1.rawValue && contact.bodyB.categoryBitMask == ColliderType.Savior.rawValue) {

println("nothing to do; chicken was already grabbed!")

}}

关于Swift:因为两次检测到碰撞,分数增加了两倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30838125/

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