AVAudioPlayer() 预期声明错误
AVAudioPlayer() Expected declaration error
我正在尝试为我的游戏添加背景音乐。我正在使用 AVAudioPlayer()
但出现 "Expected declaration" 错误。为什么会出现此错误,我该如何解决?我查了一下,但范围很广,我找不到我的确切问题。我希望我的代码上下文对您有所帮助:
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()
}
你需要合并这两行:
var ButtonAudioPlayer = AVAudioPlayer()
ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)
成一行:
var ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)
但这仍然行不通,因为您不能拥有两个 class 属性,其中一个属性依赖于另一个。
所以现在您需要将该行更改为:
lazy var ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)
但是Swift中AVAudioPlayer没有这样的初始化器。你需要它是:
lazy var ButtonAudioPlayer = try! AVAudioPlayer(contentsOfURL: ButtonAudioURL)
请注意,如果 URL 未引用有效的音频文件,这将在运行时崩溃。
此外,在 Swift 中以大写字母开头命名 classes、结构和枚举是标准的。变量、函数、case等全部以小写字母开头。
同时避免在 Swift 中使用 NSURL
。使用 URL
.
我正在尝试为我的游戏添加背景音乐。我正在使用 AVAudioPlayer()
但出现 "Expected declaration" 错误。为什么会出现此错误,我该如何解决?我查了一下,但范围很广,我找不到我的确切问题。我希望我的代码上下文对您有所帮助:
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()
}
你需要合并这两行:
var ButtonAudioPlayer = AVAudioPlayer()
ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)
成一行:
var ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)
但这仍然行不通,因为您不能拥有两个 class 属性,其中一个属性依赖于另一个。
所以现在您需要将该行更改为:
lazy var ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)
但是Swift中AVAudioPlayer没有这样的初始化器。你需要它是:
lazy var ButtonAudioPlayer = try! AVAudioPlayer(contentsOfURL: ButtonAudioURL)
请注意,如果 URL 未引用有效的音频文件,这将在运行时崩溃。
此外,在 Swift 中以大写字母开头命名 classes、结构和枚举是标准的。变量、函数、case等全部以小写字母开头。
同时避免在 Swift 中使用 NSURL
。使用 URL
.