Symbian多平台游戏引擎开发日记 2006-5-22

原创 2006年05月22日 11:22:00
         上周完成了部分TG_Display、TG_2DSurface、TG_Texture的方法,TG_Display用Create2DSurface来创建一个离屏缓存,UpdateScreen方法把TG_2DSurface的图象翻转到屏幕上。翻转方法直接使用NOKIA提供的方法,大致如下:
 switch( drawBuffer )
 {
 case 0://BitmapCopy
  {
   iGc.BitBlt( TPoint( 0,0 ), iPrimarySurface->GetFbsBitmap() );
   break;
  }
 case 1://DoubleBuffered
  {
   TInt numPixels = iScreenSize.iWidth * iScreenSize.iHeight;
   Mem::Copy( iSrnAdd, iPrimarySurface->iFbsBitmapBuffer->DataAddress(), numPixels * 2 );
   break;
  }
 }
这个方法提供了两种屏幕翻转的方法,其中BitmapCopy方法是通过屏幕服务翻转到屏幕上,DoubleBuffered是直接取得屏幕显存的地址,然后把图象数据直接复制到显存中,当然这种方式只能用在真机上,不能在模拟器上使用。在这两种方法中,理论上说第二种方法可能更快些,不过我没有测试过。
         TG_2DSurface提供Lock,Unlock方法防止在往上面绘图的时候内存移动位置。BitBlt方法把TG_Texture图象复制到TG_2DSurface指定的位置。TG_2DSurface的核心数据是CFbsBitmap,创建TG_2DSurface时,显示模式必须与屏幕相同,不能创建屏幕显示模式之外的CFbsBitmap对象,BitBlt在实现时需要注意显示模式的匹配。目前主要用到EColor4K(12位色屏幕)、EColor64K(16位色屏幕)、EColor16M(24位色屏幕),12位色屏幕为444模式,16位色为565模式,24位色屏幕为888模式。另外,每次向TG_2DSurface中绘制图片时,都要通过DataAddress方法重新获得CFbsBitmap的内存地址,否则在绘制时会出现指针位置错位的情况。TG_Texture目前还只能载入24位色BMP点阵位图,在载入时将每个象素转化为与屏幕显示模式相同的象素值,转换方法如下:
#define CONVERT16MTO4K(color)  (  ((color) & 0xF0)  >>  4 ) |  ((( (color) & 0xF000) >> 8) & 0xF0) | ((((color) & 0xF00000) >> 12) & 0xF00)
#define CONVERT16MTO64K(color)  (  ((color) & 0xF8)  >>  3 ) |  ((( (color) & 0xFC00) >> 5) & 0x7E0) | ((((color) & 0xF80000) >> 8) & 0xF800)
         接下来要继续完善TG_2DSurface绘制TG_Texture时的各种效果,比如关键色、alpha混合、带alpha通道的图片混合,同时还要区分16位色和32位色的区别,以及TG_Texture载入256色的索引位图,还将要添加TG_Palette来管理调色板。

Symbian多平台游戏引擎开发日记 2006-5-15

        现在有了点眉目了,但考虑到以后可以兼容更多的平台,把内存管理和文件I/O包装了一下。当然,有了这层包装,以后对程序的扩展也有帮助,比如进行更细致的动态内存管理等。 内存管理现在只是简单...
  • tomco
  • tomco
  • 2006年05月15日 12:29
  • 1653

Symbian多平台游戏引擎开发日记 2006-5-29

       上周完成了8位色位图的载入,并且完成了TG_Palette类。BMP位图还有4位、1位等,但我不准备支持那些格式,4位的TG_Texture我准备用做16位TG_Texture的alph...
  • tomco
  • tomco
  • 2006年05月29日 14:45
  • 1140

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

       已经将现有的图象显示部分移植到symbian第三版,可以在第三版上显示32位色的位图,并支持显示时的90度倍数旋转和翻转。在第三版中,通过模拟器得到的显示模式为EColor16MU而不是...
  • tomco
  • tomco
  • 2006年06月05日 09:58
  • 1692

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

       上周引擎的进度慢了下来,仅仅把SoundMixer例子集成到引擎里,做了下测试,来不及改进。       测试中发现,NOKIA的SDK模拟的真是真实,连第一版的声音流的BUG也模拟出来...
  • tomco
  • tomco
  • 2006年06月12日 08:43
  • 1146

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

    无尽的加班啊,加班总是悄悄的来,没打一声招呼。    这两周抽出时间改进了一下声音引擎,短信和电话事件的测试真是麻烦啊。由于条件有限,仅有一部手机,加一个红外线适配器。短信事件把我测得郁闷了,...
  • tomco
  • tomco
  • 2006年06月26日 09:01
  • 2305

Symbian多平台游戏引擎开发日记 2006-5-8

     这些天看了几个开源引擎的代码,了解了一下结构设计,就一个感觉——太复杂了。但是基本上就是这么几个部分:基本(包括多线程,数学方法,文件I/O),2D显示,UI,声音,网络等。这是个大工程,得...
  • tomco
  • tomco
  • 2006年05月09日 10:24
  • 1336

Symbian多平台游戏引擎开发日记 2006-4-23

Symbian多平台游戏引擎的目标是搭建一个能够适应S60,S80,S90及UIQ四个symbian版本的游戏开发框架,让游戏开发人员专注于游戏逻辑的开发,简化游戏开发步骤,缩短开发时间,并简化sym...
  • tomco
  • tomco
  • 2006年04月25日 15:49
  • 1641

Symbian多平台游戏引擎开发日记 2006-7-24

       有一个月没有更新了,在这个月里完成引擎的资源管理部分。完善了文件流和内存流的数据结构,增加了资源管理类,增加了图象文件载入和声音文件载入类。最主要的是制作了与之配套的图片文件转换和文件打...
  • tomco
  • tomco
  • 2006年07月24日 08:35
  • 1094

Symbian多平台游戏引擎开发日记 2006-4-24

      今天开始了引擎的开发工作,边学习,边设计,边开发,哎,经验不够就是这样了。        在VS里建立了一个新项目,以S60 Simple Hello World Application为...
  • tomco
  • tomco
  • 2006年04月25日 15:51
  • 1161

周笔记(12/52) - 过一下《游戏物理引擎开发》的书。。。

老实说……看书的吃力程度……令我想起了那年被普物虐的恐怖……但是更恐怖的是,其实我知道这些本不应该很难理解的…… 所以,怎么说呢,自强吧~ 两个无转动的碰撞的计算可以抽象为如下问题:两个物体质量...
  • YgritteSnow
  • YgritteSnow
  • 2017年03月23日 10:21
  • 522
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Symbian多平台游戏引擎开发日记 2006-5-22
举报原因:
原因补充:

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