下载

0下载券

加入VIP
  • 专属下载券
  • 上传内容扩展
  • 资料优先审核
  • 免费资料无限下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 gba游戏制作(GBA game making)

gba游戏制作(GBA game making).doc

gba游戏制作(GBA game making)

前路太过迷茫的人生
2019-01-08 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《gba游戏制作(GBA game making)doc》,可适用于社会民生领域

gba游戏制作(GBAgamemaking)gba游戏制作(GBAgamemaking)GBAS是GameboyAdvance开发系统(GameboyAdvance开发系统)的缩写它主要的功能便是用来做GameBoyAdvance游戏以及数据的传输使用者可以自行将自己所撰写的GameBoyAdvance软件透过GBAS烧录机传至GBASm或GBSm的覆写卡上面然后插入GameBoyAdvance的主机执行。就是说如果你自己也会开发GBA的游戏的话(据说对于好的程序员不是很难)那么你根本不需要任天堂的授权就可以把自己开发的GBA游戏直接通过GBAS系统在GBA上游玩。GBAS烧录机的功能除了负责将GameBoyAdvance的软件传输至覆写卡外他还具备可将原版GameBoyAdvance卡带备份至计算机储存成*。GBA的计算机档案或者将原版GameBoyAdvance卡带以及GBAS覆写卡中的记忆存盘备份成*。SAV的计算机档案。这些备份的档案均可配合各种GameBoyAdvance计算机仿真器执行。而这就意味着你可以利用这款系统自由把网络上的GBA游戏的ROM通过GBAS烧录机直接拷贝到专用GBAS卡带上想想网络上已经可以执行的GBA游戏ROM的数量是不是有些心动了,应该说GBAS是一个相当完善的系统虽然这款系统刚刚开发完毕但是它在功能上已经相当优秀了那我们现在看看它有那些特点。一、EEPROM特殊记忆支持:这款GBAS是目前唯一支持EEPROM记忆格式的GBA开发工具也是目前唯一可以对应超级马里奥(日美)的开发工具。哈哈要知道超级马里奥大冒险的美版还没有出啊而在网络上这个游戏的ROM早就有了所以大家可以看到在图片中执行的GBA游戏就是超级马里奥大冒险的美版。二、超大电池记忆:超大m电池记忆支持所有游戏记忆(包括游戏王五代的超大电池记忆也能支持)。这个特点是相当好的也比较贴近玩家的特点一般来说用了这个东西什么游戏的记录都不会出问题了玩家完全没有必要担心、GBAS的记忆空间不足。三、合卡功能:GBAS支持合卡m版本可支持两个m的游戏合卡。这样玩家可以一次录进两个m的游戏使GBAS成为一个合卡要是玩家拥有的是m的覆写卡嘿嘿那就可以让你的GBAS成为合卡了这样就节约了游戏烧录拷贝的时间当然m的卡几个自然要高得多了。四、操作接口:全新窗口下烧录接口(包含游戏上载下载以及游戏记录文件上载下载功能)全新修正了游戏传输问题更快速更准确支持窗口x作业平台安装容易使用方便使用者完全不用担心会出什么问题。GBA的软件制作烧录系统GBAS简单入门一。GBA开发包devkitadv简介devkitadv主要包括两部分一是GCC编译器二是GBA库。GCC编译器功能和我们常用的VC差不多只不过少了个编辑源代码的文本编辑器(至少我没发现我用的是EditPlus、UltraEdit也可以)还有就是不支持类(类)真是让人头痛只能用结构来替代。它的作用是把我们写的代码编译成二进制的可执行文件当然这个可执行文件是相对GBA和GBA模拟器而言的。就象Windows里的exe文件无法在MAC机上使用是一样的道理GBA库提供了图像控制及声音一系列的函数CooperatewithGCCDownloadaddress:~darkfadergbafilesdevkitadvzipTwoInstallationofDevKitAdvThereisnothingtosay,afterdecompressioncanbeuseddirectly,compilethepathofDevKitAdvcanbesetup,itisrecommendedtodoabatchfile,suchasgobatSetPATH=d:devkitadvbinPATHCMD(Winiscommand)ThreeThesimplestGBAprogram(T)maincsomebasicdatatypesTypedefunsignedcharuTypedefunsignedshortuTypedefunsignedlongu#define*REGDISPCNT(u*)xdisplayregisteraddress#defineVRAMximagebuffer#defineMVRAMxAMbuffer#defineBACKBUFFERxdoublebufferbackbuffer#definePALETTExpaletteaddress#defineMODEx*bitssinglebuffer#defineMODEx*bitsdoublebuffer#defineMODEx*bitsdoublebuffer#defineBGENABLExBG#defineSetMode(Mode)REGDISPCNT=(Mode)setthedisplaymodeofthemacrodefinitionThemainprogramIntmain(){setthescreenmode,thisistheuseofMODESetMode(MODEBGENABLE|)}BothMODEandMODEarebits,butMODEonlyhasasinglebuffer,soanimationeffectsmustnotbedoublebuffered,soexcludeMODEMODEbits,colortheoryforhandhelduse,althoughbitscolorandnoonewantstoresisttemptation,butMODEonly*Inpracticalapplication,suggestusingMODEIt'ssimpleyes,it'sgoingtobecompiledwithGCCnow:GCClmomainelfmaincObjcopyvObinarymainelfmainbinYou'llseea"mainbin"inthedirectory,andthisisthebinaryfilethatcanbeexecutedontheGBAemulator!Tttutorialdirectoryforsourceprogramdirectory,whichhasamakebat,modifythecodecancompileandexecuteitdirectly,butitshouldbenotedthatmydevkitadvisinstalledintheD:,ifyouinstalledontheotherdiscmustchangethepathparametersofmakebatFourDrawtheGBAprogramintheMODEbackgroundlayer(T)IttakesstepstodrawagraphinGBA'sMODE:converttheoriginalcolorimagefileto*h*cdatafile,weuse<BMPGBA>,heretake"imagebmp"asanexample,afterconversion,wegeta"imageh"fileatthebeginningoftheprogram#include"imageh",sothatyoucanusethe"imageh"definedpaletteandimagedataintheprogramintheprogramto"imageh"definedpaletteandimagedatawrittentotheMODEbackgroundlayerpaletteandimagebufferInaddition,GBAhasdesignedforthewizardsettingsobjectlayer,anduseitasthebackgroundlayer,onlyalittledifferent,theaddressisxfordetailhereisnottosay,youcanputthegeniedatadirectlytotheoutputbufferobjectonitHereisthesourceprogram:Thepaletteoftheimageanddatacontainsheaderfiles#include"gfximageh""globalvariablessystempaletteU*palettemem=(u*)PALETTEimagebufferU*videobuffer=(u*)VRAMfunctiondefinitionMODEdrawingfunctionVoidDraw(u*srcpalette),u*srcdatau*dstpalette,u*dstdata)主程序alongintmain(){设置屏幕模式,这里使用modesetmode(fashion|bgenable)在背景层画图,palette和data是在"imageh"定义的调色板和图像数据数组名draw(palette,thepalettedata,mem,videobuffer)}fashion绘图函数voiddraw(u*srcpalette,u*srcdatau*dstpalette,u*dstdata){intx,yloop写入目的调色板for(loop=loop<loop)dstpaletteloop=srcpaletteloop写入图像缓冲区for(x=x<x){for(y=y<y){dstdata(y)*(x)=srcdata(y)*(x)}}}编译后得到mainbin,然后在gba模拟器里运行,就可以得到这样的结果:五在mode画图的gba程序(t)在gba的mode里画一幅图也要经过相似个步骤,只不过不需要调色板数据:把原始真彩图像文件转换成*h*c的数据文件,我们用的是targagba<>,这里以"imagebmp"(*)为例,dos窗口下进targagba目录,输入"tgmodeimagebmpimageh",转换后我们就得到了一个"imageh"文件在程序开头#include"imageh",这样就能在程序中使用"imageh"定义的图像数据在程序中把"imageh"定义的图像数据写入图像缓冲区下面就是源程序:包含图像数据的头文件#include"gfximageh"全局变量图像缓冲区u*videobuffer=(u)*vram函数定义fashion绘图函数voiddraw(intx,inty,intw,inth,u*srcdatau*dstdata)主程序alongintmain(){设置屏幕模式,这里使用modesetmode(fashion|bgenable)在背景层画图,image是在"imageh"定义的图像数据数组名draw(,,image,videobuffer)}fashion绘图函数voiddraw(intx,inty,intw,inth,u*srcdatau*dstdata){inti,o,idst把源图像数据复制到图像缓冲区的指定地方idst=(y*)xfor(i=i<hi){for(o=o<wo){if(*srcdata!=){dstdataidst=*srcdata}idstsrcdata}idst=(w)}}编译后运行结果:六全屏显示的fashiongba程序(t)由于gba不支持线性的图像变换,因此得到的结果会产生一些马赛克的现象,现在还是附上这个变换函数和最终结果,其实质量还是可以接受的,大家可以试试使用这个新的mode切换到新mode全屏模式,page为缓冲区,原理是把显示寄存器数据x,y交换,得到*的显示,gba就会全屏显示voidsetflipmode(intpage){u*ioreg=(u)*x*ioreg=((page)>>)(>>)ioregx=ioregx=ioregx=ioregx=}intmain(){设置屏幕模式,这里使用modesetmode(fashion|bgenable)切换模式setflipmode()在背景层画图,image是在"imageh"定义的图像数据数组名draw(,,image,videobuffer)r七gba的双缓冲显示(t)大家在做上面model的程序时一定会发现图像在闪动(第六节的*的mm象被破了相),而model下却比较稳定这是因为model下要处理bits(实质上是bits)的图像,数据量比model下的bits大很多,在没使用双缓冲的情况下,图像填充时就会造成闪烁,这就是为什么我们抛弃了model的原因原理也很简单,图像在背缓冲区里填充好之后再直接输出到前缓冲区显示,程序里就是一个"等待同步>交换缓冲"的过程:全局变量图像缓冲区u*videobuffer=(u)*mvram函数定义等待缓冲区数据同步waitsync(void)交换缓冲区内容swapscreen(void)主程序alongintmain(){设置屏幕模式,这里使用modesetmode(fashion|bgenable)while(){在背景层画图,image是在"imageh"定义的图像数据数组名draw(,,image,videobuffer)waitsync()swapscreen()}}等待缓冲区数据同步waitsync(void){while(*(volatileu*)x<){}}交换缓冲区swapscreen(void){if(regdispcntbackbuffer){regdispcnt=~backbuffervideobuffer=(u)*mvram}else{regdispcnt|=backbuffervideobuffer=(u)*vram}}八gba的按键输入(t)讲了老半天的图像,虽说是对着mm,但大家一定也有点烦了,我们现在就换个方向,来看看gba的控制按键控制#definekeya#definekeyb#definekeyselect#definekeystarting#definekeyright#definekeyleft#definekeyip#definekeydown#definekeyr#definekeylvolatileu*keys=(volatileu*)x包含图像调色板和数据的头文件#include"gfximageh"全局变量图像缓冲区u*videobuffer=(u)*mvram图像显示坐标imgimgintx,y函数定义按键控制keyaction(void)主程序alongintmain(){设置屏幕模式,这里使用modesetmode(fashion|bgenable)while(){处理按键事件keyaction()在背景层画图,image是在"imageh"定义的图像数据数组名draw(imgimgx,y,,,image,videobuffer)waitsync()swapscreen()}}处理按键事件无效keyaction(){上方向键如果(~((*键)和keyup)){imgy=}下方向键如果(~((*键)和keydown)){imgy=}}返回()九。简单声音输出(T)简单是最好的(简洁至上)这里我们使用一个现成的声音模块(troff播放器通过柔术和哔叽)。这里还要用到一个转换工具<modgba>用来把MOD音乐文件转换成GBA的**。C。H声音数据文件。国防部和MIDI差不多但支持更多更强的效果MOD可以由Konvertor这个强大的软件转换而来。数据文件MOD#包括“songdata。”播放函数文件MOD#包括“modplayer。”主程序国际main(){设置屏幕模式这里使用modeSetMode(mode|bgenable)初始化声音(声道数音量)(,)initsound初始化音乐(节拍循环)InitSong(,)(){更新音乐播放状态updatesong()}}好吧就这么EZ。十。用图块建立可滚动缩放旋转的背景(T)这一节主要是源程序中注释为主这里就不详细说明了。”包含基本宏定义GBA。H”“数学。”是正弦余弦乘后的值数组“主要包括了我们定义背景结构及操作背景的函数。”。程序中的地图背景是由不同的图块所构成而这些图块统一紧挨着放在一个图像文件这样每个图块就会有一个索引号地图信息只要记录这张地图里共有多少个单位(图块)以及每个单位对应的图块索引号就好了在例子中”显卡瓦。”就是图块大本营而”显卡一级。”则是图块索引排列表。地图工具为”地图编辑器β”。背景的滚动缩放旋转是通过一系列的简单数学计算修改GBA系统提供的一些背景属性来完成因为是由硬件来完成背景的操作(mode)所以速度很快我还有个mode下直接修改像素点位置来完成旋转的例程待会儿大家可以比较一下。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/16

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利