我一直在创建一个新线程来更新音频引擎时遇到问题,而主线程在创建新关卡场景的过程中执行分配和 gc。
它在大多数情况下都有效,它解决了关卡转换期间音乐中断的问题,但偶尔或可能在加载一定数量的关卡后它会挂起,我必须从任务管理器关闭游戏,所以不幸的是没有错误消息弹出.
基本上我是这样设置的:
audioThread = new Thread(new ThreadStart(updateAudio));
audioThread.IsBackground = true;
audioThread.Start();
// Allocate new level objects and initialise world
audioThread.Abort();
音频线程方法只是一个无限循环:
private void updateAudio() {
while(true)
Assets.audioEngine.Update();
}
我对 c# 中的多线程和线程安全非常陌生,所以任何建议都会很棒。
谢谢, 马里奥斯
编辑:我切换了线程并使用了这样的锁:
audioUpdateThread = new Thread(new ThreadStart(setupWorld));
audioUpdateThread.IsBackground = true;
audioUpdateThread.Start();
lockHelp.loadingLevel = true;
updateAudio();
主线程现在更新音频:
while(true)
{
Assets.audioEngine.Update();
lock (lockHelp)
if (!lockHelp.loadingLevel)
break;
}
audioUpdateThread.Abort();
当新线程完成加载关卡时,它会锁定帮助对象并将 loadingLevel 设置为 false:
lock (lockHelp)
lockHelp.loadingLevel = false;
我现在没有遇到任何问题,但游戏测试员确实在关卡负载时遇到了问题。