显示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: 00x0CCC,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-63pal就是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

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

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

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

  2. 世嘉MD游戏开发进阶篇【三】:向量归一化的实现及应用

    向量归一化是非常有用的,游戏中经常能用到,就说大家都见过的,FC魂斗罗的敌人发射子弹就能用到了,敌人向玩家发射子弹首先要获取到向量,这个向量不能直接作为方向去用,必须要经过归一化处理才行,经过归一化处 ...

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

    上节课讲了如何显示一个Tile图块,这节课我来讲一下Tile图块的矩形填充. 打开Sega Genesis Tile Designer,设置tile宽度为4tiles,高度也是4tiles: 随便绘制 ...

  4. 世嘉MD游戏开发【七】:绘制图片,drawImage

    这一期讲绘制图片. 上一期讲的是绘制tile,还要用那个不怎么好用的工具导出数组数据,很繁琐,这次就不用那个蹩脚的工具了,随便一个图片用photoshop处理一下就可以了,对于图片的要求有这么几点: ...

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

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

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

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

  7. 世嘉MD游戏开发【三】:输入控制(上)

    这一节讲一下SGDK中的输入控制,SGDK提供了两种输入控制方式,一种是用回调函数接收输入信息,很自然的另一种就没有用回调函数了(貌似废话-.-!),成上下两节,这一节讲不用回调函数来接收输入信息. ...

  8. 世嘉MD游戏开发进阶篇【四】:向量点乘的计算

    向量点乘有时候是很有用的,在Unity等游戏引擎里向量点乘都是自带函数的,直接调用就可以,但是在世嘉MD这种简陋的平台,什么运算都得自己去实现,向量点乘也不例外. 直接看公式: //如果是三维向量的话 ...

  9. 【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16922703 作者:毛星 ...

最新文章

  1. awk4.0 — awk格式化
  2. 如何解决请求URL长度超过配置的maxurlLength值问题
  3. 【数论基础】模运算详解及其应用
  4. GitHub万星NLP资源大升级:实现Pytorch和TF深度互操作,集成32个最新预训练模型...
  5. 在el-table中使用el-popover,没法点击确定或取消来关闭
  6. new date.gettime 与传入时间相差毫秒数不对_给女票解释为什么日本时间比中国时间快一个小时?...
  7. DataGridView中的rows.Count比实际行数多1的原因以及解决办法
  8. (java)短时间批量访问数据库(oracle)小结
  9. git显示服务器所有分支,git 查看所有远程分支以及同步
  10. Centos7.0安装 Lets encrypt 的SSL证书
  11. 太原理工大学这两年程序设计等竞赛奖牌统计
  12. python爬虫之数据存储(四):MySQL数据库
  13. 安装完永中office2009不能正常启动
  14. 计算机硬盘检测和修复工具,教你怎么使用硬盘检测修复工具教程
  15. 嵌入式文件系统固件img制作与解包
  16. IPQ8072A Qualcomm IPQ CallManager拨号程序移植文档
  17. 区分微信小程序版本(开发工具中、开发版、体验版、正式版)的方法?
  18. js获取当天0时刻,23点59分59秒的时间戳
  19. 【STM32利用CuBe MX生成HID设备】2-给游戏控制器添加X\Y轴
  20. Linux编程基础:第一章初识Linux课后习题及自我总结

热门文章

  1. 内网渗透的域控制命令
  2. 【智慧农业】如何建造智能温室大棚
  3. Linux-网络相关笔记
  4. STM32F4与STM32L4,SPI DMA HAL 关闭片选 时机探讨
  5. PWM信号通过功率三极管控制电机,PWM波形失真问题。
  6. 交友项目【查询好友动态,查询推荐动态】实现
  7. 【狂神说】 Redis 笔记分享
  8. WinRAR去广告(简体中文版)
  9. 现实生活中和股市中人的量子纠缠现象探讨
  10. openCV给图片加坐标轴