GBA游戏开发简单入门(续篇)_SHZ之天国之门_百度空间


本节修改自教程8

在原来的教程8里我们使用的是16点阵的汉字库,但在实际应用中大家都知道,GBA大多使用12点阵的字库,因为12点阵字库与16点阵字库有点重要差别,这里做一个补完版^_^

HZK12的字模存储格式为(行X列): 12x16 ,这就是与HZK16不同的地方。每个字模占用24个字节,偏移地址的计算公式同HZK16。

所以,我们要做两个工作:
1.把HZK2GBA里的偏移量修改为: offset = (94l*(qu-1)+(wei-1))*24l;
2.修改画单字符点阵的循环:

for(i=0;i<12;i++)
  for(j=0;j<2;j++)
    for(k=0;k<8;k++)
      if(convert(ZKDATA[n*24+i*2+j],7-k))
        DrawPixel(x+j*8+k,y+i,r,g,b);


OK,完毕。ASCII的点阵还是没写,大家就先用全角的E文吧:P

本节源程序




修改自 教程8 GBABOOK

本节主要内容是DMA3传输函数和GBA时钟函数的使用。

1.GBA的DMA的通道有4个:
DMA 0 用于内部数据传输;
DMA 1、2 用 Direct sound 数据传输;
DMA 3 用于传输任何数据;

我们这里只用到DMA3将ROM里图片数据传输到显示内存,而不象以前那样经过CPU处理,因此速度很快——MODE5下可以轻松达到30FPS上,让我们的流畅显示图片序列。

void DMA_Copy(u8 channel, void* source, void* dest, u32 WordCount, u32 mode)
channel参数是通道,source是源数据地址,dest是目的数据地址,WordCount是传输的数据字数(注意!是字,两个字节),mode是传输模式是16/32位;

2.GBA CPU 主频是16.78 MHZ (59.595 ns),这里我们使用1024时钟周期(61.025 ms)做计时单位,也就是说当运行了16386(1s/61.025ms)个计时单位就是1s。


本节的工具/程序使用方法:
1.用超级解霸生成电影片段的序列BMP;
2.用图像工具XNview( 1.5M)
2.用book2gba生成gbabook.h,如果片段时间较长(比如5s),book2gba的延时可以视情况设置长一点,一般在5s左右,注意book2gba.exe、t2g.exe、freeimage.dll要与图片在同一目录;
3.拷贝gbabook.h到源程序的gfx目录里,用ARM SDT/GCC编译就行了。

注意:使用GCC编译时,gbabook.h会有容量限制,大概是5M以上就无法编译,而且速度很慢;建议使用ARM SDT!冒险上传ARM SDT及xx,(25.5M),需要的兄弟赶紧下载,会很快删除的:(

因为图片未经过压缩,生成的ROM容量很大,大概1M/s,基本上没有什么实用价值了-_-;不过,可以来骗骗人,比如,可以用我转换的例子可以发一篇新闻,标题为“PS2 大作《真·三国无双》强力移植GBA”……

本节源程序( 2.4M),带60张序列图片,容量稍大,见谅。
只想看DEMO的可以下载 1.3M

附:按左右键可控制播放。





本节使用directsound lib来播放wav,不过要注意的是:wav文件{zh0}是8bit/单声道的,大家可以用Awave Studio()的另存功能来完成转换工作。

接下来我们使用wav2gbac()来把.wav文件转换成.c文件,供程序中使用,"wav2gbac sound.wav"即可,得到一个sound.c文件。

在程序中使用方法很简单 "PlaySound(SOUND_DATA, SOUND_SAMPRATE); " SOUND就是你的wav文件名。记得加一个"while(!0);"以播放所有wav数据。

本节源程序



郑重声明:资讯 【GBA游戏开发简单入门(续篇)_SHZ之天国之门_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——