gpt4 book ai didi

ios - Sprite 套件在碰撞时获得零值

转载 作者:搜寻专家 更新时间:2023-11-01 05:42:10 25 4
gpt4 key购买 nike

当我在我的 sprite kit 游戏中检查碰撞时,当 1 个节点同时与其他 2 个节点发生碰撞时,我得到一个 nil 值。基本上我有一些“怪物”和一个“火球”,有时两个怪物在同一个位置,我从我的玩家发射的火球同时与两个怪物发生碰撞,所以碰撞似乎同时被检测到两次喜欢。

碰撞方法连续运行两次,但问题是它第一次运行时,我正在从场景中移除火球,所以第二次碰撞是火球为“零”,或者如此好像是。

代码如下:

    func projectileDidCollideWithMonster(projectile:SKNode, monster:SKNode) {
println("Hit")

(monster as Character).negativeEffect.runningSpeed = (projectile as FireBall).negativeEffect.getRunningSpeed()
projectile.removeFromParent()
println("finished hit")
}

func didBeginContact(contact: SKPhysicsContact) {

// 1
var firstBody: SKPhysicsBody
var secondBody: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}

// 2
if ((firstBody.categoryBitMask & PhysicsCategory.Monster != 0) &&
(secondBody.categoryBitMask & PhysicsCategory.Projectile != 0)) {
projectileDidCollideWithMonster(secondBody.node!, monster: firstBody.node!)
}

}

知道如何避免这种情况吗?

最佳答案

经过一些研究和思考,我暂时想到了以下修复方法,直到找到更好的修复方法(如果存在的话)

首先我制作了第一个/第二个主体可选项,然后我将在展开它们之前检查它们是否为零:

var firstBody: SKPhysicsBody?
var secondBody: SKPhysicsBody?

if (firstBody!.node! != nil && secondBody!.node! != nil) {
if ((firstBody.categoryBitMask & PhysicsCategory.Monster != 0) &&
(secondBody.categoryBitMask & PhysicsCategory.Projectile != 0)) {
projectileDidCollideWithMonster(secondBody.node!, monster: firstBody.node!)
}
}

关于ios - Sprite 套件在碰撞时获得零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673454/

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