世嘉MD游戏开发【六】:矩形填充Tile图块

上节课讲了如何显示一个Tile图块,这节课我来讲一下Tile图块的矩形填充。

打开Sega Genesis Tile Designer,设置tile宽度为4tiles,高度也是4tiles:

随便绘制几个tile块,下面我用我自己绘制的作为例子:

导出tile数据和palette色表数据(详见上一篇教程)。

注:这个软件有一个BUG,导致使用体验极差,可能是源码里某个for循环遍历的时候把xy给颠倒了,导致这个软件导出的数据不是横着数的,而是竖着数,这样到了SGDK里就会出问题,绘制出来的tile顺序根本不是正确的,哎~这个软件作者啊~忒粗心~

色表数据不能用pal.c来命名,因为SGDK已经自己有一个pal.h了,混淆了就不好了,而且SGDK自带的pal.h里面有#ifndef _PAL_H_了,要是不注意很容易就在自己写的pal.h上也写上#ifndef _PAL_H_,那么编译的时候,自己写的pal.h里面的变量都会变成第一次使用并没有声明,就会报错。这点要注意。

其他的不多说了,前面都有讲过,那么直接贴代码:

#include <genesis.h>
#include <vdp.h>

//导出的色表数据
#include "palette.h"

//导出的tile数据
#include "tile.h"

int main()
{
    //加载tile数据,api详解在上一节有说明
    VDP_loadTileData(tile, 1, 16, CPU);

    //设置颜色表,颜色表一共有4组,每组16种颜色,我现在把第一组(PAL0)色表设置成palette
    VDP_setPalette(PAL0, palette);

    //在PLAN_A卷轴上,从VRAM(显存)里的第1个位置开始读取一串连续的tile,填充到16,10这个位置,矩形宽高为4x4
    VDP_fillTileMapRectInc(PLAN_A, 1, 16, 10, 4, 4);

    //在PLAN_B卷轴上,从VRAM中读取5这个位置上的tile,在0,0的位置,开始填充矩形,宽高为8x6
    VDP_fillTileMapRect(PLAN_B, 5, 0, 0, 8, 6);

    //在PLAN_A卷轴上,从VRAM中读取4这个位置上的tile,在10,3的位置,开始填充矩形,宽高为15x5
    VDP_fillTileMapRect(PLAN_A, 4, 10, 3, 15, 5);

    //把背景色设置为PAL0色表的第8号颜色(从0开始数)
    VDP_setBackgroundColor(8);

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

上图就是代码中所说的PAL0色表的第8号颜色,如果不更改背景颜色,那么默认背景颜色就是色表中的第0号颜色,0号颜色是白色,我觉得太刺眼了就改了个暗一点的8号颜色。

编译,得到rom,用模拟器运行,如下图所示:

未完待续。。。

复古游戏开发群:879063892

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值