有没有一种方法可以将声音效果应用于碰撞



这是我在Swift的第一个项目,我正在努力学习,但我被卡住了,无法在网上找到解决方案。基本上,它是乒乓球的复制品,直到现在一切都很顺利。我的问题是,一旦我的球碰到球拍,我就不明白如何制作音效。其他的碰撞都很好,其他的听起来像是进球,一个踢得很好。只是不知道当两个精灵碰撞时,我怎么才能发出声音。这是我写的:

func didBegin(_ contact: SKPhysicsContact) {
if contact.bodyA.node?.name == "main" && contact.bodyB.node?.name == "ball" || contact.bodyB.node?.name == "main" && contact.bodyA.node?.name == "ball" || contact.bodyA.node?.name == "enemy" && contact.bodyB.node?.name == "ball" || contact.bodyB.node?.name == "enemy" && contact.bodyA.node?.name == "ball" {
ball.run(blipPaddleSound)
}
}

都错了?

我已经尝试过破坏if语句,并且已经尝试过让我的一个节点运行声音效果(ball.run('name of sound'(。我认为这可能是文件的问题,但其他效果在代码的这一部分不太好。我认为碰撞没有问题,因为球在球拍和墙上反弹没有问题

这是代码中我放置所有碰撞和接触掩码的部分:

ball.physicsBody?.contactTestBitMask = 1
ball.physicsBody?.collisionBitMask = 3
ball.physicsBody?.categoryBitMask = 1
main.physicsBody?.contactTestBitMask = 3
main.physicsBody?.collisionBitMask = 1
main.physicsBody?.categoryBitMask = 2
enemy.physicsBody?.contactTestBitMask = 3
enemy.physicsBody?.collisionBitMask = 1
enemy.physicsBody?.categoryBitMask = 2

很可能您没有将SKPhysicsContactDelegate设置为场景

你还会发现,一次碰撞可以在游戏周期内触发多个触发器,所以你可能想设置一个变量来控制声音播放,这样每次碰撞就不会播放多次

class GameScene: SKScene, SKPhysicsContactDelegate {
private var didCollide = false
func didBegin(_ contact: SKPhysicsContact) {
let object1 = contact.bodyA.node?.name
let object2 = contact.bodyB.node?.name
if object1 == "ball" || object2 == "ball" {
if object1 == "main" || object2 == "main" || object1 == "enemy"|| object2 == "enemy" {
//check if we have just collided within the last 0.3 seconds
if !didCollide {
//set the marker to true so that the sound doesn't repeatedly fire
didCollide = true
//play the sound
ball.run(blipPaddleSound)
//wait 0.3 seconds (give the ball a chance to move away from the object) 
self.run(.wait(forDuration: 0.3) {
self.didCollide = false
}
}
}
}
}
}

最新更新