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

news/2024/11/28 2:40:47/

上节课讲了如何显示一个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)色表设置成paletteVDP_setPalette(PAL0, palette);//在PLAN_A卷轴上,从VRAM(显存)里的第1个位置开始读取一串连续的tile,填充到16,10这个位置,矩形宽高为4x4VDP_fillTileMapRectInc(PLAN_A, 1, 16, 10, 4, 4);//在PLAN_B卷轴上,从VRAM中读取5这个位置上的tile,在0,0的位置,开始填充矩形,宽高为8x6VDP_fillTileMapRect(PLAN_B, 5, 0, 0, 8, 6);//在PLAN_A卷轴上,从VRAM中读取4这个位置上的tile,在10,3的位置,开始填充矩形,宽高为15x5VDP_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


http://www.ppmy.cn/news/535662.html

相关文章

世嘉MD游戏开发【八】:淡入和淡出

淡入淡出&#xff0c;很好理解&#xff0c;淡入就是画面由黑过渡到彩色&#xff0c;淡出就是画面由彩色过渡到黑色&#xff0c;其实也不一定必须是黑色&#xff0c;看你自己需求了。 注&#xff1a;淡入淡出的功能可以完成非常多的游戏玩法设计哦~打开脑洞就有惊喜~ 效果图如…

世嘉MD游戏开发进阶篇【一】:两点之间的距离

开发游戏免不了要计算两个坐标之间的距离&#xff0c;计算两点之间的距离我们可以用勾股定理&#xff0c;比如说A代表直角三角形的一条直角边&#xff0c;B代表另一条直角边&#xff0c;C代表斜边&#xff0c;得到公式ABC。C也就是两点之间的距离&#xff0c;根据公式可计算出C…

世嘉MD游戏开发【十】:精灵动画,Sprite Animation

能在世嘉MD上显示自己做的精灵动画实在是一件令人兴奋的事啊&#xff0c;今天就来讲一下如何在MD上显示精灵动画。 先准备好一张精灵图片序列&#xff0c;有这么几点要求&#xff1a; 1.单个精灵的像素宽x高不能超过16384&#xff0c;(以tile为单位的话&#xff0c;就是16x16…

世嘉MD游戏开发【四】:输入控制(下)

上一节讲了世嘉MD两种输入控制当中的一种&#xff0c;也是比较容易理解的一种&#xff0c;这一节讲一下剩下的这种控制方式&#xff1a;回调函数式。 建好文件夹&#xff0c;用vscode打开&#xff0c;新建main.c&#xff0c;依然是直觉一般的写下如下代码&#xff1a; #inclu…

世嘉MD游戏开发【九】:Sprite精灵

终于讲到Sprite精灵了&#xff0c;我自己也很希望快点讲精灵&#xff0c;但是欲速则不达&#xff0c;自己要是还没研究透彻这个知识点就去讲下一个&#xff0c;感觉文章肯定是写不好的。 我用下图来做演示&#xff0c;SFC幽游白书-魔界最强列传里的雷禅&#xff1a; 怎么处理图…

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

显示Tile图块&#xff0c;首先要有tile图块&#xff0c;这就要用到一个小工具了&#xff0c;叫Sega Genesis Tile Designer&#xff0c;软件界面如下&#xff1a; 看起来很复杂&#xff0c;其实自己亲自操作一下几分钟就能搞懂了&#xff0c;都是些很基础的功能&#xff0c;软件…

世嘉MD游戏开发【十二】:伪3D地面,Pseudo-3D

终于讲到伪3D效果了&#xff0c;这一块比较棘手&#xff0c;我从github上下载的老外写的例子一点点研究&#xff0c;研究了两三天才研究出原理&#xff0c;其实原理很TM简单&#xff0c;主要是那个老外写的代码太烂了&#xff0c;写了很多没用的东西&#xff0c;而且算法上还啰…

世嘉MD游戏开发【二】:Hello World

上一节课已经讲了SGDK环境的配置&#xff0c;这一节课来开发我们的第一个世嘉MD程序&#xff1a;Hello World 编辑器我用的vscode&#xff0c;本文就以vscode为主。 一、新建一个工程&#xff0c;其实不用说的这么正式&#xff0c;意思就是在你喜欢的任意位置新建一个文件夹&…