gpt4 book ai didi

iOS 如何检查三个 Sprite 是否接触

转载 作者:可可西里 更新时间:2023-11-01 02:27:21 28 4
gpt4 key购买 nike

我知道两个如何检查两个 Sprite 是否在 spritekit 中接触(使用 contact.bodyA 和 contact.bodyB)。有人可以解释我如何检查三个 Sprite 是否相互接触吗? (例如,三个正方形 Sprite 相互接触,因为它们堆叠在一起)

谢谢

编辑:我发现可以使用 allContactedBodies 来查找一个 body 的所有联系人。请参阅下面的代码。但是出于某种原因,for 循环出现错误。错误:'[AnyObject]?'没有名为“Generator”的成员 谁能解决这个问题?

func didBeginContact(contact:SKPhysicsContact) {
var node1:SKNode = contact.bodyA.node!
var node2:SKNode = contact.bodyB.node!
if ( node1.physicsBody?.categoryBitMask == node2.physicsBody?.categoryBitMask ) {
let bodies = node1.physicsBody?.allContactedBodies()
if bodies?.count > 3 {
NSLog("%i", bodies!.count)
for potentialBody : AnyObject in bodies {
if let body = potentialBody as? SKPhysicsBody {
body.node?.removeFromParent()
}
}
}
}
}

最佳答案

考虑这个未经测试的代码:

func didBeginContact(contact:SKPhysicsContact) {
let bodies = contact.bodyA.node!.physicsBody!.allContactedBodies()
if bodies.count > 1 {
NSLog("%i", bodies!.count)
for body:SKPhysicsBody in bodies {
body.node!.removeFromParent()
}
}
}

首先,如果 body 接触,它们的位掩码至少会重叠,所以没有必要检查位掩码(除非你想尽可能具体)。此外,如果您假设 contact.bodyA.node 不为零,那么您可以假设它有一个 physicsBody 因为它正在被联系(这只有在物理体)。

此外,您对接触的三个(或更多?)物体感兴趣,因此您只需要检查一个以上的物体是否与一个物体接触,因此检查 > 1 的意思是“如果有两个以上的机构(例如三个)参与此联系,那么......”。

最后,bodies 包含一组 SKPhysicsBody 对象,没有 nil 值(如果它们是 nil,则它们不参与此碰撞),因此将 bodies 中的任何对象转换为 SKPhysicsBody 是安全的。您可以假定 physicsBody 有一个所属节点,除非您有未附加到节点的自由体。如果您想安全起见,只需在此处检查 nil

关于iOS 如何检查三个 Sprite 是否接触,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26806260/

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