我有三个不同的 AVAudio 实例。尝试播放“audioPlayer3”声音时出现异常。有人可以帮我看看吗?”单击“playAgain”按钮时也是如此 按钮播放“audioPlayer3”,我不知道为什么。 “audioPlayer”和audioPlayer2 工作得很好。问题仅在于“audioPlayer3”。
import AVFoundation
import SpriteKit
import GameplayKit
import GameKit
class EggCatchScene: SKScene {
var mainMenuButton = SKSpriteNode(imageNamed: "mainmenuButton2")
var isfacingRight = true;
var isfacingLeft = false
var audioPlayer3 : AVAudioPlayer!
var audioPlayer = AVAudioPlayer()
var audioPlayer2 = AVAudioPlayer()
var submitButton = SKSpriteNode(imageNamed: "submitButton.png")
var scoresubmitAlert = SKSpriteNode(imageNamed: "scoresubmittedAlert.png")
var playagainButton2 = SKSpriteNode(imageNamed: "playagainButton")
var levelLabel: SKLabelNode!
var scoreLabel: SKLabelNode!
var gameoverscoreLabel: SKLabelNode!
var birdSprite = SKSpriteNode(imageNamed: "birdAnimation1.png")
var playagainButton = SKSpriteNode(imageNamed: "playagainButton")
var gameoverScreen = SKSpriteNode(imageNamed: "gameoverScreen")
var leftbuttonisPressed = false
var rightbuttonisPressed = false
var score = 0
private var bear = SKSpriteNode()
private var bearWalkingFrames: [SKTexture] = []
var rightButton = SKSpriteNode(imageNamed: "rightButton")
var eggcatchBackground = SKSpriteNode(imageNamed: "eggcatchBackground")
var leftButton = SKSpriteNode(imageNamed: "leftButton")
var eggcatchGround = SKSpriteNode(imageNamed: "eggcatchGround2")
var flyButton = SKSpriteNode(imageNamed: "upButton")
var eggSprite = SKSpriteNode(imageNamed: "eggSprite")
var number = Int.random(in: 20..<620)
override func didMove(to view: SKView) {
let sound = Bundle.main.path(forResource: "bgMusic.mp3", ofType: nil)!
let url = URL(fileURLWithPath: sound)
do{
audioPlayer2 = try AVAudioPlayer(contentsOf: url)
audioPlayer2.play()
audioPlayer2.numberOfLoops = 1
} catch {
print(error)
}
let atlas = SKTextureAtlas(named: "BirdAnimation")
let m1 = atlas.textureNamed("birdAnimation1.png")
let m2 = atlas.textureNamed("birdAnimation2.png")
let m3 = atlas.textureNamed("birdAnimation3.png")
let m4 = atlas.textureNamed("birdAnimation4.png")
let m5 = atlas.textureNamed("birdAnimation5.png")
let textures = [m1, m2, m3, m4, m5]
let meleeAnimation = SKAction.animate(with: textures, timePerFrame: 0.07)
birdSprite.run(SKAction.repeatForever(meleeAnimation))
birdSprite.position = CGPoint(x: frame.midX, y: frame.midY)
birdSprite.zPosition = 2
birdSprite.setScale(1)
self.addChild(birdSprite)
eggcatchBackground.position = CGPoint(x: frame.midX, y: frame.midY)
eggcatchBackground.zPosition = 0
eggcatchBackground.size.height = self.size.height
eggcatchBackground.size.width = self.size.width
self.addChild(eggcatchBackground)
mainMenuButton.isHidden = true
mainMenuButton.position = CGPoint(x: frame.midX, y: frame.midY - 260)
mainMenuButton.zPosition = 5
mainMenuButton.setScale(0.5)
self.addChild(mainMenuButton)
submitButton.isHidden = true
submitButton.position = CGPoint(x: frame.midX, y: frame.midY - 75)
submitButton.zPosition = 5
submitButton.setScale(0.5)
self.addChild(submitButton)
gameoverScreen.isHidden = true
gameoverScreen.position = CGPoint(x: frame.midX, y: frame.midY)
gameoverScreen.zPosition = 5
gameoverScreen.setScale(0.5)
self.addChild(gameoverScreen)
eggSprite.position = CGPoint(x: frame.midX, y: self.size.height)
eggSprite.zPosition = 2
eggSprite.setScale(0.2)
self.addChild(eggSprite)
eggcatchGround.position = CGPoint(x: frame.midX, y: 25)
eggcatchGround.zPosition = 2
eggcatchGround.size.width = self.size.width
self.addChild(eggcatchGround)
scoresubmitAlert.isHidden = true
scoresubmitAlert.position = CGPoint(x: frame.midX, y:frame.midY + 65)
scoresubmitAlert.zPosition = 3
scoresubmitAlert.setScale(0.7)
self.addChild(scoresubmitAlert)
flyButton.position = CGPoint(x: 550, y:150 )
flyButton.zPosition = 3
flyButton.setScale(0.2)
self.addChild(flyButton)
playagainButton.isHidden = true
playagainButton.position = CGPoint(x: frame.midX, y:frame.midY )
playagainButton.zPosition = 3
playagainButton.setScale(0.5)
self.addChild(playagainButton)
playagainButton2.isHidden = true
playagainButton2.position = CGPoint(x: frame.midX, y:frame.midY - 320 )
playagainButton2.zPosition = 3
playagainButton2.setScale(0.5)
self.addChild(playagainButton2)
rightButton.position = CGPoint(x: 240, y:150 )
rightButton.zPosition = 3
rightButton.setScale(0.2)
self.addChild(rightButton)
leftButton.position = CGPoint(x: 85, y:150 )
leftButton.zPosition = 3
leftButton.setScale(0.2)
self.addChild(leftButton)
scoreLabel = SKLabelNode(fontNamed: "Chalkduster")
scoreLabel.zPosition = 2
scoreLabel.fontColor = UIColor.red
scoreLabel.position = CGPoint(x: 100, y: 800)
addChild(scoreLabel)
levelLabel = SKLabelNode(fontNamed: "Chalkduster")
levelLabel.zPosition = 2
levelLabel.fontColor = UIColor.red
levelLabel.position = CGPoint(x: 550, y: 800)
addChild(levelLabel)
}
func checkforCollision(){
if(eggSprite.frame.intersects(eggcatchGround.frame)) || (birdSprite.frame.intersects(eggcatchGround.frame)){
let sound = Bundle.main.path(forResource: "gameoverSound.wav", ofType: nil)!
let url = URL(fileURLWithPath: sound)
do{
audioPlayer3 = try AVAudioPlayer(contentsOf: url)
audioPlayer3.play()
audioPlayer3.numberOfLoops = 0
} catch {
print(error)
}
eggSprite.position.y = 960
submitButton.isHidden = false
playagainButton.isHidden = false
self.birdSprite.removeFromParent()
self.eggSprite.removeFromParent()
self.rightButton.removeFromParent()
self.leftButton.removeFromParent()
self.flyButton.removeFromParent()
print("Game Over")
}
}
override func update(_ currentTime: TimeInterval){
birdSprite.position.y -= 1
checkforCollision()
scoreLabel.text = "Score: \(score)"
if(rightbuttonisPressed == true){
birdSprite.xScale = 1;
birdSprite.position.x += 10
}
if(leftbuttonisPressed == true){
birdSprite.position.x -= 10
birdSprite.xScale = -1;
}
if (score <= 10){
levelLabel.text = "Level 1"
eggSprite.position.y -= 1
}
if (score >= 10){
levelLabel.text = "Level 2"
eggSprite.position.y -= 1.1
}
if (score >= 20){
levelLabel.text = "Level 3"
eggSprite.position.y -= 1.2
}
if (score >= 30){
levelLabel.text = "Level 4"
eggSprite.position.y -= 1.3
}
if (score >= 40){
levelLabel.text = "Level 5"
eggSprite.position.y -= 1.4
}
if (score >= 60){
levelLabel.text = "Level 6"
eggSprite.position.y -= 1.5
}
if (score >= 70){
levelLabel.text = "Level 7"
eggSprite.position.y -= 1.6
}
if (score >= 80){
levelLabel.text = "Level 8"
eggSprite.position.y -= 1.7
}
if (score >= 90){
levelLabel.text = "Level 9"
eggSprite.position.y -= 1.8
}
if (score >= 100){
levelLabel.text = "Level 10"
eggSprite.position.y -= 1.9
}
if (score >= 110){
levelLabel.text = "Level 11"
eggSprite.position.y -= 2
}
if (score >= 120){
levelLabel.text = "Level 12"
eggSprite.position.y -= 2.1
}
if (score >= 130){
levelLabel.text = "Level 13"
eggSprite.position.y -= 2.2
}
if (score >= 140){
levelLabel.text = "Level 14"
eggSprite.position.y -= 2.3
}
if (score >= 150){
levelLabel.text = "Max"
eggSprite.position.y -= 2.4
}
/* if(birdSprite.frame.intersects(eggcatchGround.frame)){
// gameoverScreen.isHidden = false
let sound = Bundle.main.path(forResource: "gameoverSound", ofType: "mp3")!
let url = URL(fileURLWithPath: sound)
do{
audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer.play()
audioPlayer.numberOfLoops = 0
} catch {
print(error)
}
submitButton.isHidden = false
playagainButton.isHidden = false
self.birdSprite.removeFromParent()
self.eggSprite.removeFromParent()
self.rightButton.removeFromParent()
self.leftButton.removeFromParent()
self.flyButton.removeFromParent()
print("Game Over")
}*/
let xRange = SKRange(lowerLimit:0,upperLimit:size.width)
let yRange = SKRange(lowerLimit:0,upperLimit:size.height)
//sprite.constraints = [SKConstraint.positionX(xRange,Y:yRange)] // iOS 9
birdSprite.constraints = [SKConstraint.positionX(xRange,y:yRange)] // iOS 10
if(eggSprite.frame.intersects(birdSprite.frame)){
let sound = Bundle.main.path(forResource: "itemGet.wav", ofType: nil)!
let url = URL(fileURLWithPath: sound)
do{
audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer.play()
audioPlayer.numberOfLoops = 0
} catch {
print(error)
}
eggSprite.position.y = self.size.height
//eggSprite.position.x = number
score += 1
}
}
/*func startTimer()
{
countdownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(decrementCounter), userInfo: nil, repeats: true)
}*/
func decrementTimer(){
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
if submitButton.frame.contains(location) {
//submitButton.isHidden = true
submitButton.removeFromParent()
mainMenuButton.isHidden = false
playagainButton.removeFromParent()
playagainButton2.isHidden = false
scoresubmitAlert.isHidden = false
let score1 = GKScore(leaderboardIdentifier: "birdmemoirsleaderboard")
score1.value = Int64(score)
GKScore.report([score1]) { error in
guard error == nil else {
print(error?.localizedDescription ?? "")
return
}
print("done")
}
print("clicked")
}
if playagainButton.frame.contains(location) {
if let eggcatchScene = EggCatchScene(fileNamed: "EggCatchScene") {
let eggcatchScene = EggCatchScene(size: CGSize(width:640, height: 960))
self.view?.presentScene(eggcatchScene, transition: SKTransition.fade(withDuration: 1))
}
}
if playagainButton2.frame.contains(location) {
if let eggcatchScene = EggCatchScene(fileNamed: "EggCatchScene") {
let eggcatchScene = EggCatchScene(size: CGSize(width:640, height: 960))
self.view?.presentScene(eggcatchScene, transition: SKTransition.fade(withDuration: 1))
}
}
if mainMenuButton.frame.contains(location) {
if let mainmenuScene = GameScene2(fileNamed: "GameScene2") {
let mainmenuScene = GameScene2(size: CGSize(width:640, height: 960))
self.view?.presentScene(mainmenuScene, transition: SKTransition.fade(withDuration: 1))
}
}
if flyButton.frame.contains(location) {
birdSprite.position.y += 50
}
if rightButton.frame.contains(location) {
print("clicked")
rightbuttonisPressed = true
//sprite.position.x += 10
}
if leftButton.frame.contains(location) {
print("clicked")
leftbuttonisPressed = true
birdSprite.xScale = -1; }
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first!
if leftButton.contains(touch.location(in: self)) {
leftbuttonisPressed = false
}
if rightButton.contains(touch.location(in: self)) {
rightbuttonisPressed = false
}
}
}```