nin*_*een 5 audio avaudioplayer ios sprite-kit skaction
我正在开发一款驾驶游戏,SpriteKit
并且在发动机声音效果方面遇到了麻烦.
我想要两种不同的发动机声音.一个用于按下油门按钮,另一个用于未按下油门按钮的按钮.在游戏开始时,两种声音中的一种将持续播放.
什么是最好的方法?我的声音文件是否应该非常短(0.10秒或更短)并且循环还是应该相当长并且只是打开和关闭?我应该SKAction
用来播放声音AVAudioPlayer
还是别的什么?我尝试过使用AVAudioPlayer
但每次暂停和播放播放器(打开或关闭油门)时,游戏的帧速率会暂时下降.任何帮助表示赞赏!
根据LearnCocos2D留下的评论,我研究了ObjectAL.对于那些不熟悉的ObjectAL
,它的设计是一个简单而直观的界面OpenAL
和AVAudioPlayer
.您可以在此处下载并查找有关它的更多信息...
http://kstenerud.github.io/ObjectAL-for-iPhone/index.html
对于我的音频剪辑,我使用了3到5秒长的.caf音频文件的电机声音. ObjectAL
允许我不断循环并改变音频文件的音高.通过改变音高,我可以以不同的速度模拟电机.
以下是代码示例...
两个成员变量或您可以将它们设置为属性...
ALBuffer *_buffer;
ALSource *_source;
Run Code Online (Sandbox Code Playgroud)
初始化电机音效的方法......
- (void)initializeSound
{
// We'll let OALSimpleAudio deal with the device and context.
// Since we're not going to use it for playing effects, don't give it any sources.
[OALSimpleAudio sharedInstance].reservedSources = 0;
_source = [ALSource source];
_buffer = [[OpenALManager sharedInstance] bufferFromFile:@"EngineSound.caf"];
_source.pitch = 0.30; // Start at low pitch for engine idle.
[_source play:_buffer loop:YES];
}
Run Code Online (Sandbox Code Playgroud)
在我SKScene
的更新方法中,我根据速度调整音高.
- (void)update:(CFTimeInterval)currentTime
{
CGFloat enginePitch;
// Code to calculate desired enginePitch value based on vehicle speed.
_source.pitch = enginePitch;
}
Run Code Online (Sandbox Code Playgroud)
由于涉嫌错误SpriteKit
,我gpus_ReturnNotPermittedKillClient
EXC_BAD_ACCESS
在关闭应用时遇到了错误问题.我在这里发现了修复...
归档时间: |
|
查看次数: |
1653 次 |
最近记录: |