HAM教程:: 第四天:: Backgrounds - 位图模式
今天我们将会开始学习背景的用法和背景Mode。还记得GBA有六个显示Mode和那四个BG。
由于位图模式比较容易学习和理解了 , 所以我将要用显示模式3-5开始。
现在你必须知道的第一件事是gfx2gba这个软件。 HAM提供这个软件用来将BMP或PCX转换成适合HMA用的文件。
注意: 请花时候读去阅读gfx2gba中的Readme,里面将有长尽的解释! 最新版的readme可以在这里找到。
而图片应该是240x160 pixel( 或 160x128 模 5中用) 当PCX格式时应该是8位色,BMP格式可以是4或8 位色。如果你有有关格式和调色板等的问题,可以去图形常见疑问中看看。
教程中我们将对位图作专门的工作。我有一张照片(相当丑陋)叫做了bg.bmp或你的自己BMP拷贝对你的目录内。而在教程中用到的图片都会放到gfx目录中。看看目录中的变化:
gfx2gba-D -fsrc -pbg.pal -t1 bg.bmp
这将会生成二个文件:
bg.pal.c
bg.raw.c
在打开文件看看。bg.pal.c中记录了调色板的数据 数组名为bg_Palette。在bg.raw.c中记录了位图数据 数组名为bg_Bitmap。在迟些你将会在教程内的程序中看见这些数组名。
说到这里,让我们写一个显示背景的程序。
//主要的HAM头文件夹
#include "mygba.h"
//包含图形数据
#include "gfx/bg.raw.c"
#include "gfx/bg.pal.c"
int main()
{
//初始化HAMlib
ham_Init();
//安装显示模式
ham_SetBgMode(4);
//DMA 背景照片
TOOL_DMA1_SET(&bg_Bitmap,
MEM_BG_PTR,
SIZEOF_32BIT(bg_Bitmap),
DMA_TRANSFER_32BIT,
DMA_STARTAT_NOW)
//设定背景调色板初值
ham_LoadBGPal(&bg_Palette,SIZEOF_16BIT(bg_Palette));
while (1)
{
//使程序无限循环
}
return 0;
}
代码解释
#include "gfx/bg.raw.c"
#include "gfx/bg.pal.c"
这些是刚才造的调色板和图形文件。
ham_SetBgMode(4);
在这个例子中我们使用了Mode 4 。这个模式对中处理屏幕看成一个大的位图。 在这个模态中,调色板是8位个索引自 16位色中。这意味着你能在调色板?存中为背景储存256种取自16位元种颜色。这样使得在屏幕上作图只用到一半的显存来存放, 这样允许你在?存中存有二幅图。你能有屏幕显示一幅图而后台画另一幅。当后台作图完成时,你仅仅只需要交换屏幕。这就是闻名的双缓冲。
TOOL_DMA1_SET(...)
在我们的上面的例子中是将只读存储器中的数据拷贝到BG随机存取储存器。稍后将会有更详细解释。现在你只需要知道这是拷贝数据的一个非常快速的方法。
ham_LoadBGPal(...)
为我们的背景载入调色板。
好吧,那今天的像素是否很多,我认为这么多就足够。尝试创造你的自己背景,用转换文件工具gfx2gba看看是否你能显示它。
下载码
HAM Version 2.40 版和更高的版本
必需的HAM文件: makefile http://www.aaronrogers.com/ham/Day4/makefile
图形: bg.bmp http://www.aaronrogers.com/ham/Day4/gfx/bg.bmp
bg.pal.c http://www.aaronrogers.com/ham/Day4/gfx/bg.pal.c
bg.raw.c http://www.aaronrogers.com/ham/Day4/gfx/bg.raw.c
main源文件: main.c http://www.aaronrogers.com/ham/Day4/main.c
编译了二进文件: hello.gba http://www.aaronrogers.com/ham/Day4/hello.gba
打包下载所有的文件: Day4_BGs_Bitmap_Modes.zip
http://www.aaronrogers.com/ham/Day4/Day4_BGs_Bitmap_Modes.zip
HAM Version 2.30 版和更低的版本
必需的HAM文件: makefile http://www.aaronrogers.com/ham/Day4/2.30/makefile
main源文件: main.c http://www.aaronrogers.com/ham/Day4/2.30/main.c
编译了二进文件: hello.gba http://www.aaronrogers.com/ham/Day4/2.30/hello.gba
打包下载所有的文件: Day4_BGs_Bitmap_Modes.zip
http://www.aaronrogers.com/ham/Day4/2.30/Day4_BGs_Bitmap_Modes.zip
HAM 教程 :: 第五天:: 精灵
我认为它是时候开始学习精灵了,不是吗? 可能你会问"精灵是什么?"。精灵是除背景外(虽然一个精灵可以很大)任何的字符,或屏幕上的硬币等都是一个精灵。
如背景一样,一个精灵是有一定的尺寸的。精灵大小由8x8到64x64 pixel 。最多同时显示128个精灵。 他们能共用一个256色的调色板或分别使用最多16个不同的16色调色板。
在第四天内已经提到这个工具,那时我只对位图工作.今次这个教程中建立的只是一个蓝色的球精灵叫做了blue_ball.bmp拷贝到你的gfx子目录中:
gfx2gba -D -fsrc -pblue_ball.pal -t8 blue_ball.bmp
这将会生成二个文件:
blue_ball.pal.c
blue_ball.raw.c
调色板数据将会是blue_ball_Palette,而且图像数据将会是 blue_ball_Bitmap 。
今天的代码中我们决定在屏幕的中央显示精灵。稍后我们将会在屏幕中移动它。现在我只希望你了解一下全局变量。
注意: 你可能会注意到当球出现时图像部份的白色背景的屏幕上被显示出来。稍后当我们学到alpha混合的时候,你将教你如何只显示没有白色的背景蓝色的球。
//主要HAM头文件
#include "mygba.h"
//一些图形
#include "gfx/blue_ball.raw.c"
#include "gfx/blue_ball.pal.c"
///全局变量
u8 theball[1];// 精灵索引为球
int main ()
{
//初始化HAMlib
ham_Init();
//安装显示模式
ham_SetBgMode(4);
//设定精灵调色板初值
ham_LoadObjPal(&blue_ball_Palette,256);
//载入精灵
theball[0]= ham_CreateObj;
(&blue_ball_Bitmap,0,2,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,110,50);
//输出精灵
ham_CopyObjToOAM();
while(1)
{
//使程序无限循环
}
return 0;
}
代码解释
u8 theball[1];
u8 在 mygba.h 的定义如 unsigned char。
用数组存放精灵是为了方便实现替换或动画效果。 你可能有多少疑惑,因此当我们做完我们的第一计画的时候 , 我将会解释它更多。
ham_SetBgMode(4);
对於这个例子我们用Mode 4虽然它不用于显示精灵。因为精灵的BGMode和显示Mode是分开的,但在某些显示Mode中会有比较少的精灵储存空间。
ham_LoadObjPal(&blue_ball_Palette,256);
为我们的图像载入调色板。 我们通过它行列的位址和颜色的数目。
theball[0]= ham_CreateObj;
(&blue_ball_Bitmap,0,2,OBJ_MODE_NORMAL,1,0,0,0,0,0,0,110,50);
ham_CreateObj用来在HAM系统中产生一个精灵而且为精灵上的进一步的运算返回叁考索引。它是不很困难但你需要传给函数的许多参数。第一参数是精灵图像数组的起始位置。第二、三个参数是精灵的形状和大小。查看函数表可看见你的选择是什麽。现在我正在使用的是32x32 pixel图片, 所以值是的0,2.意思的是有4x4共8个图素区块组成。第四项是精灵模式。 现在我只需使用OBJ_MODE_NORMAL。第五项彩色模式。这个精灵我有一个256色的彩色调色板, 因此值为1. 第六项是调色板数目。因为我正在使用彩色模式1,所以为0. 如果你使用的是16个分开16色调色板, 输入符合你的调色板数目的数值(0-15).第七、八、九、十项是否作马赛克,水平翻转和垂直翻转和旋转处理。我不会使用他们之中的任何一个, 因此他们是所有都不得为0。 第十一项显示的优先次序, 在这情况它是0。最后的是精灵显示在屏幕上的X和Y的置座标。
ham_CopyObjToOAM();
这个功能用来载入对OAM的所有数据。
好吧,今天就教这么多尝试创造你的自己精灵,用转换工具gfx2gba并且看看是否你能显示它。
下载码
HAM Version 2.40 版或更高的版本
必需的HAM文件: makefile http://www.aaronrogers.com/ham/Day5/makefile
图形: blue_ball.bmp href=" http://www.aaronrogers.com/ham/Day5/gfx/blue_ball.bmp
blue_ball.pal.c href=" http://www.aaronrogers.com/ham/Day5/gfx/blue_ball.pal.c
blue_ball.raw.c http://www.aaronrogers.com/ham/Day5/gfx/blue_ball.raw.c
main源文件: main.c http://www.aaronrogers.com/ham/Day5/main.c
编译了二进文件: hello.gba http://www.aaronrogers.com/ham/Day5/hello.gba
打包下载所有的文件: Day5_Sprites.zip
http://www.aaronrogers.com/ham/Day5/Day5_Sprites.zip
HAM Version 2.30 版或更低的版本
必需的HAM文件: makefile http://www.aaronrogers.com/ham/Day5/2.30/makefile
main文件: main.c http://www.aaronrogers.com/ham/Day5/2.30/main.c
编译了二进文件: hello.gba http://www.aaronrogers.com/ham/Day5/2.30/hello.gba
打包下载所有的文件: Day5_Sprites.zip
http://www.aaronrogers.com/ham