AVAudioPlayer () Ожидаемая ошибка объявления - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь добавить фоновую музыку в мою игру.Я использую AVAudioPlayer(), но получаю ошибку «Ожидаемое объявление».Почему я получаю эту ошибку и как ее исправить?Я посмотрел его, но он очень широкий, и я не смог найти точную проблему.Я надеюсь, что контекст моего кода поможет:

import SpriteKit
import GameplayKit
import AVFoundation
import UIKit

class GameScene: SKScene {
    private var label : SKLabelNode?
    private var spinnyNode : SKShapeNode?

    var ButtonAudioURL = NSURL(fileURLWithPath: Bundle.main.path(forResource: "HomeSoundtrack", ofType: "m4a")!)
    var ButtonAudioPlayer = AVAudioPlayer()
    ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)

    var gameArea: CGRect?

    enum gameState {
        case preGame
        case inGame
        case endGame
    }

    var currentGameState = gameState.preGame

    override init(size:CGSize) {
        let maxAspectRatio: CGFloat = 16.0/9.0
        let playableWidth = size.height / maxAspectRatio
        let margin = (size.width - playableWidth) / 2
        gameArea = CGRect(x: margin, y:0, width: playableWidth, height: size.height)

        super.init(size: size)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func didMove(to view: SKView) {
        ButtonAudioPlayer.play()
    }

1 Ответ

0 голосов
/ 23 мая 2018

Вам нужно объединить эти две строки:

var ButtonAudioPlayer = AVAudioPlayer()
ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)

в одну строку:

var ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)

Но это все равно не сработает, потому что у вас не может быть двух свойств класса, гдеодно зависит от другого.

Так что теперь вам нужно изменить эту строку на:

lazy var ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)

Но в Swift такого инициализатора для AVAudioPlayer нет.Вам нужно, чтобы оно было:

lazy var ButtonAudioPlayer = try! AVAudioPlayer(contentsOfURL: ButtonAudioURL)

Обратите внимание, что это приведет к сбою во время выполнения, если URL-адрес не ссылается на допустимый аудиофайл.

Кроме того, стандартно в Swift именовать классы, структуры и перечисления, начинающиеся с заглавных букв.Переменные, функции, регистры и т. Д. Должны начинаться со строчных букв.

Также избегайте NSURL в Swift.Используйте URL.

...