作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在场景工具包中创建了一个 3D 场景,该场景包含一个被无形墙壁包围的区域,我想将物理对象以这样一种方式转换到该区域中,即它们一旦进入就无法逃脱。我想通过以下方式实现此目的:
isInScene
变量设置为 falseisInScene
设置为 true,这样我就不必检查这通常看起来工作得很好,但每隔一段时间(遗憾的是经常)我会莫名其妙地收到 EXC_BAD_ACCESS 错误。有问题的方法似乎是 contactTestBetweenBody,我用它来确定对象何时在正常碰撞检测关闭时接触墙壁或凝固器。这是必要的,以防止对象简单地从墙对象的外部弹回。
这里有一小段代码来说明。顺便说一句,“对象”是一种结构,它保留对节点的引用以及其他有用的细节:
if let solid = solidifier?.physicsBody, let wall = walls?.physicsBody {
let world = scene.physicsWorld
for i in 0 ..< objects.count {
if objects[i].isInScene == false, let body = objects[i].node.physicsBody {
let contactSolidifier = world.contactTestBetweenBody(body, andBody: solid, options: nil)
if contactSolidifier != nil {
let contactWall = world.contactTestBetweenBody(body, andBody: wall, options: nil)
if contactWall == nil {
objects[i].isInScene = true
body.collisionBitMask = CollisionMask.allSolids.rawValue
}
}
}
}
}
最佳答案
我找到了一个更好的解决方案来解决我出于某种原因根本没有想到的问题。忘掉这种将物体保持在视野中的荒谬而复杂的方法吧。相反,只需创建您想要保留对象的区域并反转其面方向和法线即可。
我没有意识到的是,SceneKit 也在碰撞检测中使用了背面剔除,所以如果一个物理对象撞到一个从里到外的对象的外部,它将干净利落地通过。
我仍然有兴趣知道错误访问错误的原因,因为接触测试方法很有用,我将来可能想将它们用于其他原因。
关于swift - 调用 contactTestBetweenBody 时出现奇怪的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32103018/
我在场景工具包中创建了一个 3D 场景,该场景包含一个被无形墙壁包围的区域,我想将物理对象以这样一种方式转换到该区域中,即它们一旦进入就无法逃脱。我想通过以下方式实现此目的: 创建墙对象 创建一个整齐
我是一名优秀的程序员,十分优秀!