【发布时间】:2020-05-28 15:20:40
【问题描述】:
这是一个具有挑战性的问题,我还没有找到答案。这就是为什么我最终创建了一个帐户,停止潜伏并成为社区的一部分:
我正在编写一个游戏,当你摇晃手机时,5 个 SCNNode(带有骰子纹理的盒子)会在一个由 2 个 SCNNode(盒子和地板)形成的框架内反弹。它模拟扑克骰子游戏。
我编写了一个接触代表,每次一个骰子碰到另一个骰子或盒子时,我都会播放一个声音,但只有第一个骰子接触任何物体,一旦脉冲开始,将是播放声音的人。
每次任何骰子相互接触、地板或框架接触时,我都无法同时播放相同的声音。当只能使用 nodeA 和 nodeB 进行编码时,我无法获得令人满意的“声音级联”。许多接触同时发生,但只有一个播放声音。
这是我的代码的样子:
extension GameViewController : SCNPhysicsContactDelegate {
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
if (contact.nodeA.physicsBody?.categoryBitMask == BodyType.die.rawValue && contact.nodeB.physicsBody?.categoryBitMask == BodyType.die.rawValue){
do{
audioPlayer?.play()
}catch{
}
}else if (contact.nodeB.physicsBody?.categoryBitMask == BodyType.box.rawValue && contact.nodeA.physicsBody?.categoryBitMask == BodyType.die.rawValue){
do{
audioPlayer?.play()
}catch{
}
}}}
AVaudioPlayer 在 ViewLoad 中准备好。我没有费心填写 catch 实例。
这里我有一个 enum 类别位掩码,因此我可以测试联系人:
enum BodyType:Int {
case die = 1
case box = 2
case floor = 4
}
我如何在任何骰子碰到另一个骰子、地板或框架时播放声音?
非常感谢!
【问题讨论】:
标签: swift xcode scenekit avaudioplayer contacts