gpt4 book ai didi

swift - 他们是否对哪个 body 是 body 和 body 什么时候开始做出任何保证(_ :) is called?

转载 作者:搜寻专家 更新时间:2023-10-31 22:44:45 25 4
gpt4 key购买 nike

当调用 func didBegin(_ contact: SKPhysicsContact)SKScene 中发生接触时,需要确定哪个 SKPhysicsBodycontact.bodyAcontact.bodyB。但是,我一直没有成功地发现在调用函数之前是如何设置的。这会导致不成功的向下转换(例如 (contact.bodyA.node!as!MySpriteNode) 导致应用程序崩溃。

我的模式理论涉及到它是由应用程序节点树中的 SKNode 对象的顺序或它们在场景的 self.childen 中的顺序决定的,但是这已被证明是不正确的。有时,在 self.children 中晚于 bodyB.node 的节点最终会成为 bodyA.node。我还没有发现涉及 categoryBitMaskcontactTestBitMask 值的模式。

Apple 的最新文档似乎对这个问题只字未提。他们是否对哪个机构将成为哪个机构做出任何保证?我不想为每个配对方向编写相同的代码,而且我确信这不是预期的方法。

最佳答案

不能保证接触变量内部主体的顺序,但我们可以保证方法内部的顺序。

假设您有 3 个具有 SKPhysicsBody 的实体

class Hero: SKSpriteNode { }
class Enemy: SKSpriteNode { }
class Gun: SKSpriteNode { }

你可以像这样组织 didBegin(_ contact:) 方法

class GameScene: SKScene, SKPhysicsContactDelegate {

func didBegin(_ contact: SKPhysicsContact) {
guard
let nodeA = contact.bodyA.node,
let nodeB = contact.bodyB.node
else { return }

switch (nodeA, nodeB) {

case let (hero, enemy) as (Hero, Enemy): break
case let (enemy, hero) as (Enemy, Hero): break

case let (hero, gun) as (Hero, Gun): break
case let (gun, hero) as (Gun, Hero): break

case let (enemy, gun) as (Enemy, Gun): break
case let (gun, enemy) as (Gun, Enemy): break

default: fatalError()
}
}
}

关于swift - 他们是否对哪个 body 是 body 和 body 什么时候开始做出任何保证(_ :) is called?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935911/

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