Symbian多平台游戏引擎开发日记 2006-6-26

原创 2006年06月26日 09:01:00

    无尽的加班啊,加班总是悄悄的来,没打一声招呼。


    这两周抽出时间改进了一下声音引擎,短信和电话事件的测试真是麻烦啊。由于条件有限,仅有一部手机,加一个红外线适配器。短信事件把我测得郁闷了,模拟器不能测试这种事件,只能不断把打包的程序发送到手机,然后启动程序,再发送一个文件到手机造成短信事件来测试,经过进百次的传输,终于OK了。


    在这里也参考了OGGPLAY的代码。仅在MaoscPlayComplete里处理了KErrDied和KErrInUse错误,在发生这两种错误时我做了小段时间的等待后重新建立CMdaAudioOutputStream,没有象《编写安全的Symbian C++游戏代码》里说的需要重新建立混合线程,只是在重新建立CMdaAudioOutputStream时主线程需要做短时间的等待,而且在短信事件中这两种错误都出现了,还出现了KErrAbort错误,但是可以不用处理。在启动声音引擎后也要让主线程做短时间的等待,这只在SYMBIAN第一版的SDK和真机需要这样做,可能是这个版本的BUG。


    上周还添加了一个裁剪器,能够随意设置屏幕上的裁剪区域。在接下来的时间需要测试一下电话事件打断后是否能够正常,并增加RLE压缩的材质类,进一步压缩程序执行过程中的内存占用量。

在OGGPLAY中的检测电话事件的代码(应该不能在第三版中用):
Tint COggActive::CallBack(TAny* aPtr)
{
 COggActive* self= (COggActive*)aPtr;
 
  if(self->iAppUi->iIsStartup) {
        self->iAppUi->PostConstructL();
 }
 
 self->iAppUi->NotifyUpdate();
 
 if( self->iLine )
    {
  RPhone::TLineInfo LInfo;
  
  self->iPhone->GetLineInfo(self->iLineToMonitor,LInfo);
  self->iLine->Open(*self->iPhone,LInfo.iName);
  TInt nCalls=0;
  self->iLine->EnumerateCall(nCalls);
  self->iLine->Close();
  
  TBool isRinging = nCalls > self->iLineCallsReportedAtIdle;
  TBool isIdle    = nCalls == self->iLineCallsReportedAtIdle;
  
  if (isRinging && !self->iInterrupted)
  {
   // the phone is ringing or someone is making a call, pause the music if any
   if (self->iAppUi->iOggPlayback->State()==CAbsPlayback::EPlaying) {
    TRACELF("GSM is active");
    self->iInterrupted= ETrue;
    self->iAppUi->HandleCommandL(EOggPauseResume);
   }
  }
  else if (self->iInterrupted)
  {
   // our music was interrupted by a phone call, now what
   if (isIdle) {
    TRACELF("GSM is idle");
    // okay, the phone is idle again, let's continue with the music
    self->iInterrupted= EFalse;
    if (self->iAppUi->iOggPlayback->State()==CAbsPlayback::EPaused)
     self->iAppUi->HandleCommandL(EOggPauseResume);
   }
  }
 }
 return 1;
}

OGGPLAY中处理电话事件和短信事件的代码:
void COggPlayback::MaoscPlayComplete(TInt aError)
{
 // Error codes:
 // KErrCancel      -3
 // KErrUnderflow  -10
 // KErrDied       -13  (interrupted by higher priority)
 // KErrInUse      -14

 if (iState==EPaused || iState==EClosed) return;

 if (aError == KErrUnderflow)
  return;
 if (aError == KErrInUse) aError= KErrNone;

 if (aError == KErrCancel)
  return;

 if (aError == KErrDied) {
  iObserver->NotifyPlayInterrupted();
  return;
 }

 if (aError != KErrNone) {
  TBuf<256> buf,tbuf;
  CEikonEnv::Static()->ReadResource(tbuf,R_OGG_ERROR_18);
  CEikonEnv::Static()->ReadResource(buf,R_OGG_ERROR_16);
  buf.AppendNum(aError);
  iEnv->OggErrorMsgL(tbuf,buf);
  if (iObserver )
  {
   if (!iEof )
    iObserver->NotifyPlayInterrupted();
  }
 }
}

最受欢迎的游戏引擎集结号:跨平台篇

移动应用分类五花八门,面对众多对手,移动游戏突破重围,成了大家日常生活中的基础娱乐活动之一。也因此,越来越多的开发者开始投身移动游戏的开发中。不过,面对多样化的目标平台,要知道选择一个适合自己的跨平台...
  • y97523szb
  • y97523szb
  • 2015年07月11日 18:39
  • 3916

千百万Java开发者的福音:跨平台Cocos2d-Java游戏引擎诞生

跨平台Cocos2d-Java游戏引擎以及配套的CocosEditor2.0游戏开发工具终于诞生了。使用Java语言来开发Cocos2d跨平台游戏, 和-lua,-js 的风格相近API,毋庸置疑,这...
  • touchsnow
  • touchsnow
  • 2014年08月26日 10:49
  • 13828

目前游戏行业内部主要几款游戏引擎的技术对比

如果只有客户端的话,可以考虑用gamebryo,技术好一点,用ogre也可以,如果规模不大,用unity3d,如果很有钱,要效果很好的,用unreal3,bigworld是带服务器的,如果能力不够,最...
  • CNHK1225
  • CNHK1225
  • 2016年02月26日 10:50
  • 15840

【Cocos2d-x游戏引擎开发笔记(26)】中文和自定义字体

cocos2d-x实现中文,有两种方法,转码和读取XML文件,对于第一种,在我的博客 【Cocos2d-x游戏引擎开发笔记(2)】在屏幕上渲染文字 中有介绍,下面来看看怎么样从XML文件中读取中文。 ...
  • zhy_cheng
  • zhy_cheng
  • 2013年08月04日 00:47
  • 28010

【Cocos2d-x游戏引擎开发笔记(6)】触屏事件与多媒体

原创文章,转载请标明出处:http://blog.csdn.net/zhy_cheng/article/details/8273435 Cocos2d-x要实现触屏事件,首先覆盖父类的onEnter...
  • zhy_cheng
  • zhy_cheng
  • 2012年12月08日 21:01
  • 8154

【Cocos2d-x游戏引擎开发笔记(6)】触屏事件与多媒体

转载自:http://blog.csdn.net/zhy_cheng/article/details/8273435 Cocos2d-x要实现触屏事件,首先覆盖父类的onEnter函数,在这个函...
  • lannan91
  • lannan91
  • 2015年03月04日 13:44
  • 273

Symbian s60 3rd 2D游戏引擎

  • 2008年09月09日 16:43
  • 349KB
  • 下载

3D游戏引擎编程part26of31

  • 2008年07月17日 18:51
  • 8.58MB
  • 下载

2012移动开发工具盘点:16大跨平台游戏引擎

CSDN为大家介绍了Top傻瓜式移动游戏开发工具,现在将为大家,介绍好用的跨平台游戏开发工具,但当中大部分需要一定的编程基础,比较专业,少量工具则适合没有编程基础的人。 1. Edgelib:2...
  • artwebs
  • artwebs
  • 2013年06月19日 17:27
  • 1199

【Cocos2d-x游戏引擎开发笔记(6)】触屏事件与多媒体 (转)

转载 :http://blog.csdn.net/zhy_cheng/article/details/8273435 Cocos2d-x要实现触屏事件,首先覆盖父类的onEnter函数,在这个函数中...
  • hhy018
  • hhy018
  • 2013年10月29日 10:35
  • 723
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Symbian多平台游戏引擎开发日记 2006-6-26
举报原因:
原因补充:

(最多只允许输入30个字)