世嘉MD游戏开发【五】:显示Tile图块

显示Tile图块,首先要有tile图块,这就要用到一个小工具了,叫Sega Genesis Tile Designer,软件界面如下:

看起来很复杂,其实自己亲自操作一下几分钟就能搞懂了,都是些很基础的功能,软件可以到我群里的群文件下载。

这一节课,我就来演示一下如何显示出图中的这个小人儿。

前面讲过的操作我都会省略,没看过前面几节课的童鞋可以补一下,编辑器我用vscode。

点击下图中的按钮,导出数据:

点击后弹出如下窗口,按下图操作:

Export Format选择C语言,Start Tile是从第几个tile开始,End Tile就是到第几个tile结束了,我这里只画了一个tile,所以是从0到0,如果画了两个tile那就是从0到1,以此类推。

设置完毕点Generate Data生成数据,弹出如下窗口:

点Save To File存到你的工程目录里。

把unsigned long 替换成const u32,变量名你自己喜欢改就改个名字,不想改就不用动了,变量名我就叫tile了,如下代码:

const u32 tile[8] = {
	0x00FFFF00,
	0x0F1111F0,
	0xF111111F,
	0xF1F11F1F,
	0xF111111F,
	0xF11FF11F,
	0x0F1111F0,
	0x00FFFF00, //  Tile: 0
};

改完之后会报错,说未定义标识符u32,在上面include一下<genesis.h>就好了,然后新建一个tile.h头文件,头文件里就不用include<genesis.h>了,代码如下:

const u32 tile[8];

忘了一件事,tile的调色板还没处理,回到tile编辑器里,点如下按钮切换到调色板编辑界面:

调色板一共有64种颜色,每16种颜色一组,分成4组,这是同屏幕可以显示的最多颜色数,一个tile块最多可以使用16种颜色,每一个颜色对应一个16进制颜色数,咱么可以不用tile编辑器,直接用手来写一个tile块(8x8),代码如下:

const u32 tile[8]={
    0x55555555,    //一位数代表一个像素,这个数是从0-F,正好对应了调色板中的16种颜色。
    0x50000005,    //5意思就是这个像素用了调色板中的第6个颜色
    0x50000005,    //0意思就是这个像素用了调色板中的第1个颜色
    0x50000005,    //不难看出这个tile绘制出来之后是一个矩形
    0x50000005,
    0x50000005,
    0x55555555,
};

这里我就不去测试绘制这个矩形tile了,只是告诉大家一下原理,帮助理解,回到正题。

按Export Palette导出调色板数据,依然选择C语言,这里只用到了第一组色板,导出从0到0就可以了:

导出pal.c文件到工程:

把代码改成如下:

#include<genesis.h>

const u16 palette [16] = {
	0x0EEE,0x00EE,0x0E0E,0x000E,0x0EE0,0x00E0,0x0E00,0x0888,	//  Pallette: 0
	0x0CCC,0x0088,0x0808,0x0008,0x0880,0x0080,0x0800,0x0000,	
} ;

新建pal.h就不说了,跟tile.h一样道理。

新建main.c,代码如下:

#include <genesis.h>
#include <vdp.h>
#include "tile.h"
#include "pal.h"

int main()
{
    /*简介:加载tile数据

    tile:就是tile数组了

    第一个1:VRAM(显存)中存储Tile块的数量是固定的,上限多少块Tile我也不清楚,
    如果填写0,则全部位置都填充这个tile,如果填写1,则1这个位置就是这个tile,如果填写2,
    那么2这个位置就是这个tile,以此类推,如果后面再写一句VDP_loadTileData,第一个参数
    是另一个tile,第二个参数还是1,那么1这个位置的tile则被后来的tile覆盖掉(这个地方太拗口)

    第二个1:是一共有几个tile块,这里就一个图块就写1,要是绘制了5个图块就写5
    最后一个参数可以写0-2,这里写0就可以了,0代表CPU,1代表DMA,2代表DMA_QUEUE
    */
    VDP_loadTileData(tile, 1, 1, 0);

    /*设置调色板颜色
    0代表从第几个颜色开始设置,范围是0-63
    pal就是pal数组了
    16是你要设置的颜色数量,pal数组里有16种颜色,就写16
    */
    VDP_setPaletteColors(0, palette, 16);


    /*简介:在xy位置显示VRAM中指定位置的tile块。

    PLAN_A:是卷轴A,还有PLAN_B,用A卷轴也可以,用B卷轴也可以。

    1:指定VRAM中的位置,就是VDP_loadTileData中的第二个参数,如果VRAM中指定的位置没有tile,那么你将得到一个垃圾值。
    2:x网格坐标,这里的xy不是像素位置,是以8x8为单位分割成的网格坐标。
    2:y网格坐标。
    */
    VDP_setTileMapXY(PLAN_A, 1, 2, 2);

    while (1)
    {
        VDP_waitVSync();
    }
    return 0;
}

最后一步,按下Ctrl+Shift+B编译,看到工程目录下多出一个out文件夹,out文件夹里有一个rom.bin文件,就是制作好的游戏rom了,用MD模拟器打开rom就能看到tile图块了,是一个笑脸。

未完待续。。。

复古游戏开发群:879063892

发布了17 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq272508839/article/details/103275455