10FCNES游戏开发教程.docx
《10FCNES游戏开发教程.docx》由会员分享,可在线阅读,更多相关《10FCNES游戏开发教程.docx(11页珍藏版)》请在三一办公上搜索。
1、10FCNES游戏开发教程终于考完期末了,以后就开始假期了,闲暇的时间也估计多了,可以写东西的时间估计也多了,当然只是估计而已,也可能不上课期间忙。管它呢,离搬迁还有一两天,先写完这这最后一章再说了。 本来之前就写了部分的,可惜电脑中毒,重弄系统,忘了备份,损失啊,那多少个日日夜夜积累下的代码,全部重写吧。在此也给看到这篇教程的朋友们一个提醒,小心防毒、小心备份。 昨天看到好友SHZkkqq说我太谦虚,其实感觉太谦虚很不恰当,因为知道自己懂的太少了,所以好多地方都不敢妄加评论,我怕误人子弟,希望大家在看到我的教程中的错误是可以给我提出,有错误才有进步嘛,错不可怕,就怕不知道自己错了,不是吗?
2、好吧,开始吧,说的这章要给大家一个完整的NES游戏创建,这游戏没有大家想象的那么刺激,好像只能够证明CC65还能写游戏,希望大家不要抛砖。 下面你看到的是一个创建游戏的整个过程,我将会从CC65的安装开始讲。 一下所讲到的所有工具包括代码和资源都可以在我的网盘 首先安装CC65(官网http:/www.cc65.org/ FTP下载目录ftp:/ftp.musoftware.de/pub/uz/cc65/),由于我们只是用来编译成NES的文件,所以安装选项中只选对NES的支持就够了。如图: 安装完CC65就可以编译C文件了。假设我们自己写了一个C代码文件,文件名为“helloworld.c”,
3、代码为: #include void main cprintf(OK!); while(1); 我们的编译命令可以这样写: cl65 -t nes -o helloworld.nes helloworld.c 意思是编译helloworld.c文件,使用的编译模式为nes模式,最终生成的文件名为helloworld.nes。 用模拟器打开它就可以看到屏幕上显示“OK!”,更详细的可以看我前面的教程。 好吧,开始我们的游戏吧。 首先要大郅的构思一下我们的游戏的大致界面,我们想要的大致是可以移动一个主人公,他拥有推箱子、放炸弹的能力,他的任务是摧毁箱子获得通往下一关的钥匙,仅此而已。如果你还想更多
4、一点的话,可以让他在某一关开始会遇到敌人,或者炸开箱子后遇到敌人,或者很有诗意的最后救出了公主等等。鉴于时间和能力,再说也要给大家修改的空间,我就不打算实现那么多功能了,其实也不知道CC65所支持的40k的NES允不允许我们再去弄那么多了,这也是一个问题。 要有主人公,当然要先让主人公有个人样,所以先画主人公和周围场景吧。 打开 yychr,导入我之前提过的“标准ascii.chr”这个是维京猎人给我的,觉得里面的字体好看就定为自己的标准了,我不强求大家遵守,只是为了表述方便,我一直在以它为例。先把它另存为一下,以免之后的修改破坏了“标准ascii.chr”,我们另存为“mg.chr”吧,记得
5、把它存到待会我们要保存代码的文件夹下面。画面如下: 然后发挥自己的想象力画一下我们的主人公及其他相关的图块吧,顺便感谢一下风竹丽影,因为我的图片全是她抽空帮我画的。 最终的画面: 补充一下: 你可能会遇到导入chr文件后画面上也不显示任何东西,那可能是调色没弄对,你自己再配一下色就可以了。 Yychr的调色不会使用保存,希望知道的朋友可以给我提示,谢过。 更详细的使用见我前面的教程。 有了图块,我们需要还需要制作游戏开始的界面,也就是我们的logo,游戏时的框架,以及游戏结束时的GAME OVER画面等等。于是我们需要用到另一个工具了,维京猎人的“FC专用地图编辑器”,目前的最新版本是v2.5
6、,在此谢过猎人。 先弄我们的logo吧,打开“FC专用地图编辑器”,在菜单字模导入字模中导入“mg.chr”,设置一下配色,拼成你想要的logo之后保存为“mglogo.nmr”如图: 用同样的方法创建出游戏框架“mgframe.nmr”,如图: 暂停时的画面“mgpause.nmr”,如图: 游戏结束画面“mgover.nmr”,如图: 完成这些资源后,我们开始写代码吧,我写这个游戏的时候是一部分代码一部分资源的完成的,但是我我希望大家在写游戏的时候先整体构思后,准备好相关的资源在开始写代码,细心的朋友可能会发现我的字模文件很没有连贯性,就是因为想到一部分弄一部分的后果,希望大家吸取经验教训
7、。 给游戏想一个拉风的名字吧,原本想写的是迷宫,后了又改了,改的迷宫不像迷宫,泡泡堂不像泡泡堂,随便想一个名字吧,叫“迷宫不迷”,也希望FC对于大家不是迷,希望大家精通FC,本人的小小愿望,呵呵。 代码部分我已经很详细的写了注释了。大部分都可以看懂了,又因为百度空间的文章长度限制,我不可能一一讲述了。我挑几个地方讲讲吧。不懂的欢迎E-Mail我。 1、 头文件包含 你可能会看到如下的预处理命令: #include mylib.c /包含我的库 #include mglogo_dat.h /包含logo名字表信息 #include mglogo_col.h /包含logo调色板信息 #inclu
8、de mgframe_dat.h /包含框架名字表信息 #include mgframe_col.h /包含框架调色板信息 #include mgpause_dat.h /包含暂停名字表信息 #include mgsp_col.h /包含精灵调色板 #include mglogosp_col.h /包含logo时精灵调色板 #include mgover_dat.h /包含game over名字表信息 #include mgover_col.h /包含game over调色板信息 #include mgabout_txt.h /包含关于文档 解释一下吧,第一条是包含我的库,因为游戏中很多地方要
9、使用到库中的代码,所以你必须把它包含进去,并且你要保证mylib.c在游戏代码文件所在的文件夹下面。我使用的mylib.c是v1.2的,你使用前面版本的库的话可能编译不通过或者是运行出错。关于我的库,你可以看前面的教程,有详解的。 后面的那些基本上是一个模式的,就是包含”aaa_bbb.h” ,因为这些都是使用anytoc从其他格式文件转换为C语言头文件的,期中aaa是原文件名,bbb是原文件后缀。因此”aaa_bbb.h”的原文件是”aaa.bbb”。问了以后的使用方便,我们做如下约定吧:当我们使用anytoc转换文件时,我们将文件转换为“文件名_后缀.h”,并且在头文件中的数组名也是“文件
10、名_后缀”。这样一来我们就容易记忆多了。比如我们要加载游戏的logo画面的话只需要“load_full_name_0(u8*)mglogo_dat);”就可以载入logo了。这样也就可以避免变量名的冲突。 最后的一句是包含游戏的说明,其原文件名为“gmabout.txt”,文档中“”表示说明完,“$”表示换页。 也许你会觉得这样包含很麻烦,我承认的确麻烦,但是本人也是没办法了。曾看过rNES的作者使用直接包含的方法(好像是直接包含一个其他格式的文件的方法,如#include map.bin),试了好久也没有成功,难道是编译器问题,还是他使用的是伪代码,只为说明问题。在VC+平台下也试了他的办法
11、,但好像这个不是C标准,伪代码的概率大。 2、 关于VRAM的读写访问 感觉这问题是个难题,之前问过猎人,他给过我一些建议,才实现了现在的访问功能。但现在有一个问题,直接访问的话会有屏幕的闪烁问题。于是不断调试不断探索,才有了现在的一点点经验。如下: 访问前先waitvblank;访问完之后卷轴归位,再waitvblank;这样就不会有闪烁,但有有一个问题来了,一个游戏中每个大循环中有好多个访问VRAM的过程,如果每次都这样的话游戏的速度就慢好的了。问题一直有只是换了一种形式。希望有解决方案的朋友给给建议,谢过! 在代码中,卷轴归位我使用的是预处理命令来完成的,所以你会看到: #define
12、ES address(SCR_scroll_offset)=0; address(SCR_scroll_offset)=0 这两行之后我们可以使用ES;来完成卷轴归位。 所以但你看到: waitvblank; c=getc_xy(VRAM_name_0,bx-1,by); ES; waitvblank; 也不用奇怪,这几句代码实现了读取对名字表0的(bx-1,by)位置的读取。 其他部分的说明希望大家自己去改改,然后发现其作用原理,说实话代码写的很纠结,好些想法都是想到了才加上去,所以从变量的命名到这个的游戏框架都很晕人,体谅体谅。 写完代码可以开始编译了,因为之前包含了好多其他格式的资源文件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 FCNES 游戏 开发 教程
链接地址:https://www.31ppt.com/p-3140337.html