gpt4 book ai didi

swift - 当使用 SpriteKit 同时与两个节点发生碰撞时,我如何选择我想要联系的节点?

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

我有一个用 Swift 3 编码的 iOS 应用程序,其中一个球被射出并从屏幕上的砖 block 上弹开。如果我的砖 block 是一个 PhysicsBody(矩形),我无法轻易确定砖 block 的哪一侧/角被击中。我决定不这样做,而是让积木的每一面都有自己独立的节点。我现在遇到的问题是,球不能同时与两个节点(比如左侧和底部)接触。每次与球接触后,我都会降低砖 block 的值(value),而这又会使这一次击球的值(value)降低 2。我怎样才能做到,如果一个球击中两个节点,只执行一个接触的代码?

有时下面的代码会执行两次,球两次都与两个 brickNode 接触。

func didBegin(_ contact: SKPhysicsContact) {
var firstBody:SKPhysicsBody
var secondBody:SKPhysicsBody

let countPoint = true

if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}

if (firstBody.categoryBitMask & ballCategory) != 0 {
if (firstBody.node != nil && secondBody.node != nil){
if (secondBody.categoryBitMask & brickCategory) != 0 {
ballDidHitBrick(ballNode: firstBody.node as! SKShapeNode, brickNode: secondBody.node as! SKShapeNode, decreasePoint: countPoint)
} else if (secondBody.categoryBitMask & roofCategory) != 0 || (secondBody.categoryBitMask & rightWallCategory) != 0 || (secondBody.categoryBitMask & leftWallCategory) != 0 || (secondBody.categoryBitMask & bottomCategory) != 0 {
ballDidHitWall(ballNode: firstBody.node as! SKShapeNode, wallNode: secondBody.node as! SKShapeNode)
} else {
//Nothing as of yet
}
}
}
}

最佳答案

所以按照史蒂夫上面所说的,我实现了下面的代码,我不再每次更新都有双重联系人:

if !bricksHit.contains("\(secondBody.node?.name ?? ""), \(firstBody.node?.name ?? "")") {
//If ball hasnt hit the object more than once
bricksHit.append("\(secondBody.node?.name ?? ""), \(firstBody.node?.name ?? "")")

ballDidHitBrick(ballNode: firstBody.node as! SKShapeNode, brickNode: secondBody.node as! SKShapeNode, decreasePoint: countPoint, contact: contact)
}

我还在下面添加了我的代码,每次更新后都会清除 bircksHit:

override func didFinishUpdate() {
bricksHit.removeAll()
}

关于swift - 当使用 SpriteKit 同时与两个节点发生碰撞时,我如何选择我想要联系的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46303595/

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