GBA教程 -- 地图显示


源程序及GFX工具 http://cgdn.net/gba/tutor/m0bg.zip

这一节我们主要来看看MODE0下的图块地图背景的显示。

在实际制作中,MODE 0是我们的首选,我们可以使用BG0,BG1, BG2, BG3四个可移动/缩放/旋转背景层和OAM(精灵层),不过都是基于图块(tile)模式。适合制作RPG及一般的动作游戏.

  我们原来大概地讲解过地图模式下的一些应用,这里补充说明一下,具体还是对着源程序来说吧。

  从这里开始我们会把一些最基本的定义放到lib目录下的mygba.h文件里,然后把你常用的函数如初始化放到你自定义的H文件里,需要时调用即可,这样可以减少主程序的代码,使之更加易读。不过前提是你的函数命名规则一定要好懂,而且做好说明,这样积累下来你就可以做出自己的GBA开发包了。

  言归正传,我在这里暂时使用air.h为开发包的头文件,一些基本应用函数会放在这里。

1.初始化,设定为MODE 0,使用BG0,支持OAM以及BG0的基本属性。

//- 显示初始化函数 ----
void Air_Core_Init()
{
    //Mode 0, Background 0, Sprites, 1D Mapping
    SetMode(MODE_0 | BG0_ENABLE | OBJ_ENABLE | OBJ_MAP_1D);

    //Background 0
    REG_BG0CNT = CHAR_BASE(1) | BG_MOSAIC_ENABLE | BG_COLOR_256;
}

2.把我们的图块图像(调色板和像素)和图块排列组合数据分别送入指定的地址。因为MODE 0是单缓冲的,而且常规的绘点方式速度较慢,所以这里使用DMA来完成数据传输,大家可以在MODE 3下试试DMA与绘点法的速度差别(我是在模拟器上试的,很明显的速度差别。不知道烧到GBA上会是怎样)。

// 背景图块调色板数据,长度为128字(256字节)
DMA3(paldata,BGPaletteMem,128);

// 背景图块数据,64*64像素的图块
DMA3(chardata,BackgroundMem,64*64/2);

// 背景图块组合数据
DMA3(mapdata,VideoBuffer,32*32/2);

这里的paldata,chardata,mapdata来自一张256*256大小的map.bmp图像,这里有一个gfxcvt的工具集,它的作用就是把一张BMP图像转换成图块模式下的背景文件(包括图块调色板数据,图块像素数据,图块组合数据),具体使用方法请大家看看gfcvt目录下的make.bat文件。

还有另一种生成GBA背景文件的方法就是找针对gba的地图编辑器,把你想要的地图画出来,http://gbadev.org/files/GBAMeditBeta4.zip,这个小工具还不错的,简单易用。

OK,现在看看我们编译出来的东西。我用的编译器是ARM SDT,用GCC的兄弟可以自己把void C_Entry()改成int main(),再改一下make.bat也是一样的。


你可能感兴趣的:(GBA教程 -- 地图显示)