Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 快速音频播放速度_Swift_Sprite Kit_Avaudioplayer_Skscene - Fatal编程技术网

Swift 快速音频播放速度

Swift 快速音频播放速度,swift,sprite-kit,avaudioplayer,skscene,Swift,Sprite Kit,Avaudioplayer,Skscene,我正在开发一个游戏,其中主要的精灵是一个纺车。我想将音频与随着车轮减速而改变音调的旋转车轮相关联。当车轮停止转动时,我希望音效停止。有人能给我指出正确的方向吗 在我的游戏场景中,我有以下代码: override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { for touch in touches { let location = touch.location(in: s

我正在开发一个游戏,其中主要的精灵是一个纺车。我想将音频与随着车轮减速而改变音调的旋转车轮相关联。当车轮停止转动时,我希望音效停止。有人能给我指出正确的方向吗

在我的游戏场景中,我有以下代码:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    for touch in touches {
        let location = touch.location(in: self)
        //Start spinning the wheel
        if atPoint(location).name == "play_button" {
            player?.physicsBody?.angularVelocity = 0
            player?.rotatePlayer()

            //Click back button
        } else if atPoint(location).name == "back_button" {
            let play_scene = CharacterSelectScene(fileNamed: "CharacterSelect")
            play_scene?.scaleMode = .aspectFill
            self.view?.presentScene(play_scene!, transition: SKTransition.doorsOpenVertical(withDuration: 1))
        } else if atPoint(location).name == "settings_button" {
            let play_scene = SettingsScene(fileNamed: "SettingsScene")
            play_scene?.scaleMode = .aspectFill
            self.view?.presentScene(play_scene!, transition: SKTransition.doorsOpenVertical(withDuration: 1))
        }
    }
}

override func didSimulatePhysics() {
    let speed = player?.physicsBody?.angularVelocity
    if (speed != CGFloat(0.0)) {
        if (speed! <= CGFloat(0.1)){
            finishedRotation = true
        }
    }
}
override func didFinishUpdate() {
    if (finishedRotation == true) {
        let play_scene = QuestionScene(fileNamed: "QuestionScene")
        play_scene?.scaleMode = .aspectFill
        self.view?.presentScene(play_scene!, transition: SKTransition.doorsOpenVertical(withDuration: 1))
    }
}
func didBegin(_ contact: SKPhysicsContact) {
    let defaults = UserDefaults.standard
    var firstBody = SKPhysicsBody()
    var secondBody = SKPhysicsBody()
    if (contact.bodyA.node?.name == "pin") {
        firstBody = contact.bodyA
        secondBody = contact.bodyB
    } else {
        firstBody = contact.bodyB
        secondBody = contact.bodyA
    }
    if (firstBody.node?.name == "pin" && secondBody.node?.name == "geography") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "maths") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "history") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "science") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
    }
}

我已解决该问题,代码如下所示:

func playSound() {
    let url = Bundle.main.url(forResource: "clicker", withExtension: "m4a")!

    do {
        SoundEffect = try AVAudioPlayer(contentsOf: url)
        guard let players = SoundEffect else { return }

        players.prepareToPlay()
        players.play()
    } catch let error as NSError {
        print(error.description)
    }
}
func didEnd(_ contact: SKPhysicsContact) {

    let defaults = UserDefaults.standard
    var firstBody = SKPhysicsBody()
    var secondBody = SKPhysicsBody()
    if (contact.bodyA.node?.name == "pin") {
        firstBody = contact.bodyA
        secondBody = contact.bodyB
    } else {
        firstBody = contact.bodyB
        secondBody = contact.bodyA
    }
    if (firstBody.node?.name == "pin" && secondBody.node?.name == "geography") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
        playSound()
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "maths") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
        playSound()
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "history") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
        playSound()
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "science") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
        playSound()
    }
}

关于AVAudioPlayer的rate属性,Xcode文档告诉了您什么?除了默认rate和启用rate之外,文档中没有说明其他内容。我如何将速率与纺车的速度联系起来,使其听起来更真实?你的问题是因为一些事情而打破了堆栈溢出的规则。1) 缺乏信息(例如,我们不知道你的车轮是如何工作的,因此我们无法确定如何用旋转速度映射速率/节距),2)到目前为止你尝试了什么?渴望帮助的人可以提供帮助,但没有人愿意写出完整的解决方案。。。好吧,这是会发生的,但这不是这个网站的工作方式;)请看看如何看待球场:但这可能不是你想要的。正如我所说,你必须提供更多的信息。理想情况下,您提供的MVP可以重现问题。感谢whirlwind。我将提供更多的细节简短,但这是造成重大滞后和冻结的游戏。设备上和模拟器中都有。不确定是什么导致了滞后。当您真正只需要1个时,可能会收到多个调用
didEnd
。您可以尝试将自定义标志设置为跳过
didEnd
,直到它关闭一次后的下一帧。。。看看这是否有效。
func playSound() {
    let url = Bundle.main.url(forResource: "clicker", withExtension: "m4a")!

    do {
        SoundEffect = try AVAudioPlayer(contentsOf: url)
        guard let players = SoundEffect else { return }

        players.prepareToPlay()
        players.play()
    } catch let error as NSError {
        print(error.description)
    }
}
func didEnd(_ contact: SKPhysicsContact) {

    let defaults = UserDefaults.standard
    var firstBody = SKPhysicsBody()
    var secondBody = SKPhysicsBody()
    if (contact.bodyA.node?.name == "pin") {
        firstBody = contact.bodyA
        secondBody = contact.bodyB
    } else {
        firstBody = contact.bodyB
        secondBody = contact.bodyA
    }
    if (firstBody.node?.name == "pin" && secondBody.node?.name == "geography") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
        playSound()
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "maths") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
        playSound()
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "history") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
        playSound()
    } else if (firstBody.node?.name == "pin" && secondBody.node?.name == "science") {
        let set_topic = secondBody.node?.name
        defaults.set(set_topic, forKey: "Topic")
        playSound()
    }
}