gpt4 book ai didi

ios - xcode sprite kit 背景音乐

转载 作者:行者123 更新时间:2023-12-01 18:58:33 25 4
gpt4 key购买 nike

我有一个使用 sprite kit 制作的游戏,我添加了一个 30 秒的音频文件,以使用 av 音频播放器作为我的游戏的背景音乐无限循环。当游戏从某个状态切换时,我想停止并从我的场景文件开始播放音乐。

这是我的 View controller.m 文件,我在其中添加了停止音乐方法

@implementation ViewController

- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];

NSError *error;
NSURL *backgroundMusicUrl = [[NSBundle mainBundle] URLForResource:@"game" withExtension:@"wav"];
_backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicUrl error:&error];
_backgroundMusicPlayer.numberOfLoops = -1;
[_backgroundMusicPlayer prepareToPlay];
[_backgroundMusicPlayer play];

SKView * skView = (SKView *)self.view;

// Create and configure the scene.
SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;

// Present the scene.
[skView presentScene:scene];
}

-(void)stopMusic
{
[_backgroundMusicPlayer pause];
}

然后在我的 scene.m 文件中,我尝试调用 stop music 方法,但是背景音乐并没有停止播放。
-(void)switchToTutorial{

[[ViewController alloc] stopMusic];

_gameState = GameStateTutorial;

//remove unwatnted nodes
for (int i = 0; i < _mainMenu.count; i++)
{
SKSpriteNode *chosenNode = [_mainMenu objectAtIndex:i];
[chosenNode removeFromParent];
}

for (int i = 0; i < _mainMenuButtons.count; i++)
{
SKSpriteNode *chosenNode = [_mainMenuButtons objectAtIndex:i];
[chosenNode removeFromParent];
}
[self setupTutorial];
}

最佳答案

问题是这一行:

[[ViewController alloc] stopMusic];

您正在创建一个新的 ViewController 实例,但应该将 stopMusic 消息发送到当前使用的实例。

实现这一点的一种方法是在场景中拥有一个 ViewController 类型的属性并将 viewController 设置为它。

在 MyScene.h 中
@class ViewController; //below the #import
...
@property(weak) ViewController *viewController;

在 MyScene.m 中
#import "ViewController.h"
...
[self.viewController stopMusic]

在 ViewController.m 中
MyScene * scene = [MyScene sceneWithSize:skView.bounds.size];
scene.viewController = self;

这种方法的问题是您必须为每个场景传递 ViewController。也许拥有一个静态 AVAudioPlayer 会更容易和两个静态方法来启动和停止音乐,然后你可以调用
[ViewController stopMusic];

如果你已经到了那个阶段,你可以考虑创建一个额外的类,即 MusicPlayer 来为你处理所有的音乐。所以你会调用像
// in ViewControllers viewDidLoad
[MusicPlayer initializePlayer];

//where needed
[MusicPlayer playMusic];
[MusicPlayer stopMusic];

关于ios - xcode sprite kit 背景音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24714357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com