ios - 为什么无法进行物体内碰撞检测?
问题描述
为什么苹果会选择只允许在世界范围内进行碰撞检测,而不是允许单个物体在与其他物体发生碰撞时进行检测,这有什么特别的原因吗?这似乎是一个可怕的设计选择,但由于我没有发现太多抱怨,我猜我缺少一些东西。那么,有吗?
解决方案
这里有一些很棒的评论,也不知道为什么。他们将整个事情建立在节点和节点名称上 - 似乎在事实变慢之后查找事情可能会更好。这是我的处理方式,类似于其他人所说的。
由于我有一堆导弹,我只是将节点命名为 = "Missi" + String(format: "%04d", vIndex), name = "Explo" + String(format: "%04d", vIndex) 等。 ,这样我就可以为我正在寻找的内容添加前缀并直接进入我的节点数组并做我的事情。我有数百件事情要做,但碰撞功能非常小。
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact)
{
guard let nodeNameA = contact.nodeA.name else { return }
guard let nodeNameB = contact.nodeB.name else { return }
//print("CONTACT: \(nodeNameA) \(nodeNameB)")
if(nodeNameA.prefix(5) == "Explo" && nodeNameB.prefix(5) == "Enemy")
{
gameControl.defenseMissileHit(vIndex: Int(nodeNameB.suffix(4))!)
}
if(nodeNameA.prefix(5) == "Enemy" && nodeNameB.prefix(5) == "Explo")
{
gameControl.defenseMissileHit(vIndex: Int(nodeNameA.suffix(4))!)
}
if(nodeNameA.prefix(5) == "Explo" && nodeNameB.prefix(5) == "Missi")
{
//print("HIT")
gameControl.enemyMissileHit(vIndex: Int(nodeNameB.suffix(4))!)
}
if(nodeNameA.prefix(5) == "Missi" && nodeNameB.prefix(5) == "Explo")
{
//print("HIT")
gameControl.enemyMissileHit(vIndex: Int(nodeNameA.suffix(4))!)
}
}
我没有子类化节点,我用我想要的东西创建了诸如 DefenseObject 之类的类,然后创建了一个我可以直接访问或循环的数组。
var defenseObjects: [Int:DefenseObject] = [:]
class DefenseObject: ObjectBase
{
var index: Int = 0 // Index of object
var name: String = "" // Object name
var isActive: Bool = false // Object is active
init(vGameType: gameTypes, vCount: Int, position: SCNVector3)
{
super.init(vGameType: vGameType, vIndex: vCount)
isActive = true
name = "Enemy" + String(format: "%04d", vIndex)
}
}
然后我可以直接进入索引并执行 defenceObjects[NDex].call()。我也不会尝试在 wave 期间清理节点,我设置了一个 isActive 开关并隐藏它们。在波浪结束时,我清理它们。
希望有帮助。
推荐阅读
- mysql - 使用 direct_join 的 Mysql 查询导致成本更低但执行时间更长
- html - 浏览文件时打开具有自定义名称的特定类型的文件
- python - 打印命令中的 Python 错误。语法错误
- docker - Docker 教程错误
- android - 键盘可见时向上滑动整个布局
- ios - 即使 isIdleTimerDisabled = false,iOS 应用程序也会在后台运行
- android - 在 Appium 自动化中找不到 Android 应用程序的 Snackbar
- linux - 除了使用正则表达式之外,如何在shell中忽略或排除备份文件[以〜结尾的文件]?
- batch-file - 同一批处理脚本运行两次时未设置变量
- ios - Swift 类数据和 UITableViewController 运行时错误