当前位置:首页 » 游戏问答 » gba上的3d游戏如何实现的

gba上的3d游戏如何实现的

发布时间: 2022-08-09 20:09:44

‘壹’ gba游戏设计的设计开发软件是什么

1.GBA简介

Game Boy Advanced(GBA)是日本任天堂公司于2001年推出的一款32位掌上游戏机。它着重于游戏机的便携式,并且以2D游戏为主(3D游戏依然不错)。GBA有十分高效硬件图像处理加速,GBA基本上是现在全球公认的最佳的掌上游戏机。

GBA的硬件功能十分多。它的CPU是以RISC为基础的32位ARM CPU,主频是16.78MHz。屏幕最大支持240x160的16位真彩色显示。在图形处理方面GBA还另外提供了硬件加速,支持硬件上的图形旋转,缩放,alpha混合,face in/out淡入淡出等。

GBA的软件开发主要是以C语言为主,程序设计简单而且十分自由,也正是这一点吸引了许多爱好者在GBA上做东西(不一定是游戏)。你完全可以把它做成PDA,做成Mp3播放器(它的声音处理方面能力也不错哦),做成随身电影播放齐,做成电子词典等,只要你有能力设计它的软件。

不说多了,我们还是主要来看看如何开发GBA的软件。应该说,你只要会点C语言,就可以进入GBA的开发行列中了。在GBA上写程序比在电脑上写程序更简单。GBA是单总线的设计,也就是说通过简单的读写命令就能完成所有的内部硬件操作。访问GBA内部的寄存器就犹如访问一块内存一样简单,而GBA所有的功能都是通过读写寄存器而完成的。

2.GBA程序开发准备

GBA开发所需要的东西除了一台可以用的电脑外,主要就是一个编译器和一个GBA模拟器。

有了GBA模拟器,你就可以在你的电脑上运行GBA程序了。GBA模拟器应该是到处可以找得到的。我推荐的是VisualBoyAdvance。你可以在www.gbadev.org上下载最新的版本。如果你还想把你的程序弄到GBA机器上玩,那么除了应该有个GBA外,还应该有个ROM烧录器。比如EZ-Flash。通过它可以把电脑上的ROM烧录到GBA卡带上,然后放到GBA上运行。(总共一个GBA加一个128MB的EZ-Flash大概是1000元人民币)

GBA程序开发可以用汇编语言和C/C++语言来写程序,不过汇编语言比较复杂,而且不是我们平常使用8086汇编,而是Arm汇编。任天堂公司可能觉得C++程序运行消耗太大,不推荐C++语言来开发,所以我们都一直将C语言作为首选。

‘贰’ 电脑游戏的3D效果是如何实现的

3D游戏是使用空间立体计算技术实现操作的游戏。从编程实现角度来说游戏基础模型(游戏的人物,场景,基础地形)是使用三维立体模型实现的,游戏的人物角色控制是使用空间立体编程算法实现的。

‘叁’ GBA模拟器

PSP上的GBA模拟器GPSP是能够使用金手指的,这点毫无疑问,可惜只支持GS码,需要用到的软件是gpSP cheat creator。

简单来说方法就是这样
新建一个文本文档
输入
[作弊说明](如HP max)
作弊码
[作弊说明]
作弊码
等等
注意作弊码要GS格式(gameshark)
然后保存
修改文档名
要和GBA文件名一样,后缀名改为cht
放到ggbsp模拟器里cht文件夹里
玩游戏时按三角选读取作弊文件读取那个cht文件,再激活就OK了
大概就是这样,详细的去BAIDU搜搜看吧

下面我以<机战J>为例,介绍以下如何在PSP上修改GBA游戏的具体步骤:
1.首先随便找个gba的cht文件(附件里的001)
2.把下列代码写入并保存为名字是002的cht文件(可先保存再改文件名)
gameshark_v3 991
5A347CA8 6D6CE7DB
gameshark_v3 992
2A25150B C28EAA9E
注:991为99个移动力+1的道具,992为99个格斗能力+5的道具
3.使用gpSP cheat creator 打开(file-Open)002.cht,并保存为GPSP用的cht(附件的jzj.cht)
4.在psp上打开机战j这个游戏,打开作弊文件,本文打开的是jzj.cht。在次进入作弊界面,把[991,992设为ON(中文版为旧)。
好了,现在991和992两种道具可以无限卖掉了,这样就不愁钱花了,简单吧。
————————————————————————————————————————-
GS码扫盲:
1.GS就是gameshark,格式AAAAAAAA BBBBBBBB,
2.GS码有有V1和V3这2种版本
gameshark_v1PS
gameshark_v3,
PAR_v1
PAR_v3
这几种,他们之间并不兼容,使用时要注明
如果你不知道你得到的金手指是哪个版本,请都试试看
3.GPSP支持Gameshark / Pro Action Replay(PAR) 的金手指码
4.完成1个代码后,按回车,再按1次回车后可继续输入另1个代码,全部完成后保存至记忆棒
下面为1个例子
gameshark_v3 MarioInfHP
995fa0d9 0c6720d2,
gameshark_v3 MarioMaxHPP
21d58888 c5d0e432
gameshark_v3 InfHlthBat+}
6f4feadb 0581b00e
79af5dc6 5ce0d2b1PS3,Wii,Xbox360,PS2,Xbox,GC,PSP,NDS.GBA,EMU,ROM,MAME,Arcade,Game,汉化游戏,汉化模拟器6L#n3Q5M6V0W2v.`
dbbd5995 44b801c9
65f8924d 2fbcd3c4bb
gameshark_v3 StopTimer
2b399ca4 ec81f0711.

一、金手指类型介绍:
VBA的金手指有3种类型:RAW Code、CodeBreaker Code、GameShark Code。它们分别是:随机存储器写入代码,译码代码,编码代码(该翻译根据其原理命名,准确名字不祥)。为方便,下文中将分别简称为:RAW、CB、GS。
RAW是我们最常见的类型,一般的金手指都以这种方式出现。如:绿宝石中文版中的快速升级——02023E94:2710,这就是RAW码。它是最简单的内存写入方式,无论是搜索还是编辑修改都十分方便。当然,它不是完美的。也正因为它有很多限制,所以才出现了CB和GS。
CB和RAW很像,但出现的概率比GS还小。现在见到的只有绿宝石英文版里的一些,如:容易捕捉野生怪兽——C2711CBA 6F6B,72EA7742 0E4D。仔细看看不难发现,它是用空格分离的(RAW用“:”),而且使用了2个代码,这将在下面进行说明。
GS也是比较常见的代码,在《口袋妖怪》里几乎各版都有,最着名的就是穿墙了:DC507600B95091F6(绿宝石中文),C518E2595ADBAF5B(绿宝石英文)。它的特点是——16位的16进制数,没有任何分割符。它的功能也很强大,大家应该在无拘无束地驰骋于地图上时体会到了吧。

二、金手指的组成及原理:
在介绍组成前,先说明一下GBA内存的分配方式:
GBA(VBA的模拟是一样的)采用32位地址,内存地址从00000000到8FFFFFFF,其中被我们修改游戏用到的为:WRAM——02000000~02FFFFFF,IRAM——03000000~03FFFFFF,ROM——08000000~08FFFFFF,即2个随机存储区和1个只读存储区。
1、RAW
代码举例:
020287E8:FE,02023E94:2710,02027DD8:04030201
解释:
这是最简单的代码,由地址和数值构成。地址和数据间使用“:”(注意:是英文的冒号)分隔。其作用是将数据写入所给的地址里,锁定后,该地址里的数据将不再变化。其作用范围为随机存储区,即02000000~03FFFFFF一段。代码形式为:0xxxxxxx:yy,或0xxxxxxx:yyyy,0xxxxxxx:yyyyyyyy。“:”前面是地址,后面是要写入的数据。地址以“02”或“03”开头是其最主要的标志。支持8位、16位、32位数据的写入(就是上面的3种形式)。各种形式之间可以互相转换。如:02027DD8:04030201,这是32位数据的写入,由于1个地址只能放一个8位数据,所以实际上,系统是将数据“04030201”放到了以02027DD8开始的4个地址里,所以转成8位数据的写入就是:02027DD8:01,02027DD9:02,02027DDA:03,以及02027DDB:04(注意,高位的数据在高位地址),换成16位写入也是一样,注意地址的位置就可以了:02027DD8:0201,02027DDA:0403。
2、CodeBreaker
代码举例:
非加密:82031CF0 0003,加密:C2711CBA 6F6B,72EA7742 0E4D
解释:
这种代码也是由地址和数据组成,不同的是,CB码使用空格做分隔符,通过翻译识别游戏运行时的指令代码控制所要修改的地址数据的变化,所以针对不同的游戏,CB码有加密的CB码和非加密CB码之分。加密的CB码通常会有一个所谓的“开机码”(注意:和硬件的金手指开机码不是一个东西),用来识别游戏的代码格式及是否有加密信息。如:绿宝石英文版中的CB码的开机码就是:9266FA6C 97BD,905B5ED3 5F81,B76A68E5 FAB1,其中的第1个:9266FA6C 97BD就是加密密钥。而非加密的CB码不需要开机码,如火叶中的地点转移CB码:82031CF0 xxxx就不需要开机码的支持。而且CB码的代码顺序是有严格规定,不能随便交换顺序。如开机码必须放第一位。又如:CB码往往带有判断代码。仍以刚才提到的容易捕捉野生怪兽——C2711CBA 6F6B,72EA7742 0E4D举例,还原回非加密CB码为:72024214 BD79,82024214 BD90,其中7xxxxxxx yyyy表示当地址0xxxxxxx的数值为yyyy时,下一条代码生效,8xxxxxxx zzzz就是将16位数据zzzz写入地址0xxxxxxx。所以这条代码的意思就是:当02024214的值为BD79时,才将02024214的值转为BD90。所以也不可以交换。这和RAW、GS完全不同,它们是可以随便交换位置的。这就决定了CB码的修改比较麻烦。对于带条件的锁定,因为当该地址没有出现所需要的值时(这里是BD79),是不会处于锁定状态的。这样就可以解决使用RAW时,因为错误锁定而容易造成死机的问题。CB代码的作用范围覆盖全内存单元,但是因为开机码需要专门的程序获得,加密的代码也要对原CB码进行相关变换,十分繁琐,加上CB在32位输入时,还要进行一些处理,降低了可读性,所以限制了它的广泛使用,不能不说是一种损失。
3、GameShark
代码举例:
DC507600B95091F6,C518E2595ADBAF5B
解释:
GS是非常特殊的代码,使用32位的代码形式,代码内没有分隔符。虽然作用也是覆盖全内存,但其使用上比CB方便。因为RAW已经基本上解决了随机存储区的修改问题,所以GS通常是解决只读区的修改的。如穿墙金手指:DC507600B95091F6(绿宝石中文),C518E2595ADBAF5B(绿宝石英文),它们实际上是:08087B70:2100(中文),0808820C:2100(英文),但是因为RAW无法写入只读区,所以使用GS解决。因为只读区基本上就是rom的代码段,所以GS通常称为“编码代码”。那么GS的原理是什么呢?我们以中文版为例,看看08087B70到底存了什么。查看游戏的代码发现,原先的指令为and r1,r0,就是进行r1和r2的“与”运算。修改后变成mov r1,0#0,就是将“0”放入r1里。二者的区别就是后者可以使标志寄存器的零标志置“1”,从而达到使游戏始终判断“没有碰墙”的目的。GS虽然不用“开机码”,而且对8位、16位、32位数据的写入都支持,但是没有有效的搜索方法,即使找到了对应的地址,转换为机器可识别的32位代码也是个问题,所以使用上也收到了限制。
从上面的介绍中大家应该发现了:RAW无论使搜索还是编辑都是最方便的,但是局限性很大,特殊的修改不易实现,甚至无法修改。在敏感数据的修改上有很大的问题,常常是死机的罪魁祸首。CB修改很灵活,覆盖范围广,而且具有判断机能,适合敏感数据的修改。但开机码的获得和代码转换上困难比较大,长数据的输入麻烦,代码顺序严格,规则太多。GS兼有RAW的易用性和CB的通用性,但搜索和转换也是它的最大缺点。总之,3种金手指代码各有利弊,在不同的场合使用适当的代码形式就可以扬长避短,达到很好的效果。

三、金手指的添加与删除:
各种金手指在VBA里的输入有一些区别,由于高版本的VBA带有对金手指类型的自动识别功能,所以即使输入错误,有的仍然可以生效。但这并不意味着我们可以随便输入,因为机器的判断往往和我们希望的有区别,所以良好的习惯还是要培养的。下面我们就说说如何输入和删除金手指。

1、RAW
大家应该经常使用这种格式的金手指了,对它的输入不会陌生。打开修改—>修改代码列表,在弹出的窗口里(如图所示),“代码”和“修改”就是输入RAW码的地方(图中的A、B)。不同的是:前者是批量输入,后者是单个输入,具体方法在初级教程里已有,就不再说了。
至于删除,对于RAW码来讲,只要把代码前面的勾去掉就可以了,当然,也可以选中后,按“移除”。2个做法都不会留下任何信息在内存里,所以不会有任何问题。
2、CodeBreaker
CB码正确的输入位置应该是“修改译码”(图中的D)。许多人分不清CB和GS,往往写到“金手指”里,虽然在后期的模拟器里可以识别,但早期的模拟器不支持这种输入,会视为非法的输入。和“代码”的使用类似,按下“修改译码”后,将CB码填入弹出的窗口,确定即可。这里要注意:使用CB码时,如果有开机码,必须将开机码首先写入;在填写CB码时,注意代码的先后顺序,绝对不能改变位置,否则后果就严重了。
删除和RAW一样,去掉勾或移除都可以。如果想同时解除多组CB码,直接解除开机码的锁定一样可以。这样以后恢复起来也容易。
3、GameShark
“金手指”(图中的C)就是为GS码准备的。也和“代码”的输入类似,只是不像CB这么严格,把需要的写进去,确定就可以了。
GS的删除就比较麻烦了。因为GS通常是改只读区的,所以那里的数据不会像随机存储区一样随游戏进行而复原,所以单纯的去掉勾或移除有时不会起作用。要彻底移除GS码,首先删除代码,之后使用游戏自身的SAV存档储存游戏进度,重新载入游戏(注意:不是重启,要重新读取游戏),读取SAV进度后,GS代码的修改就解除了。

四、各种金手指间的转换:
因为CB码和GS码的特殊性,手动计算代码非常困难,所以转换时,使用2个工具进行辅助——AR Crypt和CBAcrypt,前者是转换GS码的,后者是转换加密CB码的。。界面上2者有相似的地方,就是左边是输入框,右边是输出框。区别就是AR Crypt的功能键稍微多一些,下面就分别介绍它们的使用方法。
1、RAW与GameShark的转换
在AR Crypt下拉菜单“Creat…”里,将类型设置为“AR V1/2”,然后上方下拉菜单处,置为“type 6”。下方单选框是设置转换类型的。左边“From”是原代码类型,右边“To”是目标类型。一般我们只用到“RAW”和“AR V.1/V.2”。
RAW→GS:
对于“02”,“03”开头的RAW码,我们一般不需要使用GS码,但还是可以转换的。将代码填入左边的输入框。注意:对于8位数据的代码,如:020287E8:FE(绿宝石中文,快速生蛋),应该填入020287E8:000000FE,因为AR Crypt默认的格式必须是xxxxxxxx:yyyyyyyy的。而对于16位数据的代码,如:02023E94:2710(绿宝石中文,快速升级),应该填入12023E94:00002710,看清楚,首位的“0”要写成“1”,这是转换位数的识别代码,不要写错。至于32位数据的代码,如:02027dd8:04030201(绿宝石中文,全家具的第一个),应该填入22027DD8:04030201,也就是首位的“0”变成“2”。填写好后,将“From”设置为:RAW,“To”设置为:AR V.1/V.2,直接按下中间的“Proceed”,右边就会出现转换好的GS码了。(由于设置的原因,转换好的GS码可能中间带有空格,使用时请将空格去掉)。
对于“08”开头的代码,方法有一点不同。如:08087B70:2100(绿宝石中文,穿墙),只需补齐为32位的:08087B70:00002100,之后就可以填入左边了。注意:不要改变首字符,还保持原样。之后不做任何设定,直接按下中间的“Creat”按钮。这时会在下方生成一个“64”开头的代码,暂时不理会它。而右边出现的代码就是我们需要的GS码了。使用时仍然要去掉所带的空格。
GS→RAW:
这个其实就是上面的逆过程,但因为事先不知道代码是位于随机存储区还是只读区,所以先采用同样的转换方法,之后再加以区别。
首先将32位的GS码代码写入左边的输入框,“From”选AR V.1/V.2,“To”选RAW,按下“Proceed”,看到右边出来结果了。下面就要看结果进行处理了:
如果结果前8位数是“02”、“12”、“22”开头的,那么只要全部变为“02”就可以了(想想RAW转GS时我们做的变化,实际是一回事)。而后边的8位数就是数值,去掉前面多余的“0”就可以了。
如果结果前8位数是“64”开头,那么就要将“6”去掉,将剩下的7位数转二进制,左移1位(即末尾补“0”),转回十六进制就是地址了。数值就是后8位数,去掉多余的“0”就可以了。为方便说明,我们就来实践一下:将穿墙金手指——DC507600B95091F6输入左边,转换后得到:64043DB8 00002100,前8位数去掉开头的“6”得到:4043DB8,转二进制得到:100000001000011110110111000,左移1位得到:1000000010000111101101110000,转回十六进制得到:8087B70,所以RAW码就是:08087B70:2100。大家是不是都转换对了?
2、RAW与CB的转换
RAW→CB:
RAW转非加密CB码比较简单,只要注意数值的位数就可以了。8位的数据就将RAW码的首位“0”变成“3”,16位数值就将首位的“0”变成“8”。之后地址和数值之间的“:”变成空格就可以了。如:02023E94:2710→82023E94 2710,020287E8:FE→320287E8 FE。如果想写带判断的CB码,判断的条件地址,首位“0”变成“7”就是条件地址的数值等于条件数值时时执行下一代码;将首位“0”变成“A”就是条件地址的数值不等于条件数值时执行下一代码。
对于要使用加密的CB码的游戏,先将密钥写入CBAcrypt的左边,然后在密钥下写入转换好的非加密CB码,按下“Encrypt”,左边就会出现加密的CB码了。
CB→RAW:
这个也是上面的逆过程。对于CB码是否加密很容易判断,只要代码使用时,必须加上第1行以“9”开头的开机码,那就是加密的CB码。转换前需要用CBAcrypt先进行解密。解密时也是先填入密钥(就是那个“9”开头的代码),然后填入待解密的CB码,按下“Decrypt”,右边出现的就是解密的CB码。
对于非加密的CB码以及解密完后的CB码,将首位变回“0”就是RAW码了。如果是带判断的CB码,转回RAW码后将无法使用判断功能,所以原来“7”和“A”开头的代码就可以不要了。
3、CB与GS的转换
没有简便的方法,使用RAW做为中间媒介进行转换吧。
为方便大家学习,下面提供一些代码互相转换的结果,大家在实践中慢慢学习体会吧,希望能对大家有所帮助:(加密的CB密钥为9266FA6C 97BD)
RAW CB GS
0202076E:0002 D2201D23 7C06 43886F04BF29716A
0202433A:0001 DD3B48F5 DE3F 6D78CDEC1518218F
02023CB0:2710 82023CB0 2710 92472A55471E7A26
080586EE:2100 880586EE 2100 D4603F5DFDF00F02
0806776A: 6F01 8806776A: 6F01 C7EB8672FF85CA2B

‘肆’ GBA游戏怎么自己制作

链接变了

GBA游戏开发简单入门
http://dev.gameres.com/Program/Other/GBA/GBA.htm

GBA游戏开发简单入门(续篇)
http://dev.gameres.com/Program/Other/GBA/GBA_1.htm

GBA教程 -- 地图显示
http://dev.gameres.com/Program/Other/GBA/GBAMap.htm

GBA教程 -- 精灵显示
http://dev.gameres.com/Program/Other/GBA/GBASprite.htm

GBA的Tile模式技术探讨——空间占用篇
http://dev.gameres.com/Program/Other/GBA/GBATile_memory.htm

GBA编程初解
http://dev.gameres.com/Program/Other/GBA/GBAProgram.htm

详细说明GBA的TILE方式(一)
http://dev.gameres.com/Program/Other/GBA/GBATile1.htm

详细说明GBA的TILE方式(二)
http://dev.gameres.com/Program/Other/GBA/GBATile2.htm

GBA开发C语言内功补习
http://dev.gameres.com/Program/Other/GBA/Cprog.htm

GBA颜色特效的设置方法
http://dev.gameres.com/Program/Other/GBA/GBAEffect.htm

‘伍’ 如何实现3D红蓝游戏

iZ3D
Driver.我在用,支持很多种方法,A卡同样行,红蓝没问题,我用手机打字不易,你再上网搜一下吧。链接就不好给了,有破*版的。

‘陆’ 如何制作GBA游戏

GBAS 是 GameBoy Advance development System (GameBoy Advance 开发系统)的缩写,它主要的功能便是用来做 GameBoy Advance 游戏以及数据的传输,使用者可以自行将自己所撰写的 GameBoy Advance 软件透过 GBAS 烧录机传至 GBAS 64M 或 GBS 128M 的覆写卡上面,然后插入 GameBoy Advance 的主机执行。就是说,如果你自己也会开发GBA的游戏的话(据说对于好的程序员不是很难),那么你根本不需要任天堂的授权,就可以把自己开发的GBA游戏直接通过GBAS系统在GBA上游玩。
GBAS 烧录机的功能除了负责将 GameBoy Advance 的软件传输至覆写卡外,他还具备可将原版 GameBoy Advance 卡带备份至计算机储存成 *.GBA 的计算机档案,或者将原版 GameBoy Advance 卡带以及 GBAS 覆写卡中的记忆存盘备份成 *.SAV 的计算机档案。这些备份的档案均可配合各种 GameBoy Advance 计算机仿真器执行。而这就意味着你可以利用这款系统自由把网络上的GBA游戏的ROM通过GBAS烧录机直接拷贝到专用GBAS卡带上,想想网络上已经可以执行的GBA游戏ROM的数量,是不是有些心动了?
应该说GBAS是一个相当完善的系统,虽然这款系统刚刚开发完毕,但是它在功能上已经相当优秀了,那我们现在看看它有那些特点。
一、EEPROM 特殊记忆支持: 这款GBAS是目前唯一支持 EEPROM 记忆格式的 GBA 开发工具,也是目前唯一可以对应 Super Mario Advance (日/美)的开发工具。哈哈,要知道超级MARIO大冒险的美版还没有出啊,而在网络上,这个游戏的ROM早就有了,所以大家可以看到在图片中执行的GBA游戏就是超级MARIO大冒险的美版。

二、超大电池记忆: 超大 1M 电池记忆,支持所有游戏记忆(包括游戏王五代的超大电池记忆也能支持)。 这个特点是相当好的,也比较贴近玩家的特点,一般来说,用了这个东西,什么游戏的记录都不会出问题了,玩家完全没有必要担心、GBAS的记忆空间不足。
三、合卡功能: GBAS 支持合卡,64M 版本可支持两个 32M 的游戏合卡。这样,玩家可以一次录进两个32M的游戏,使GBAS成为一个合卡,要是玩家拥有的是128M的覆写卡,嘿嘿,那就可以让你的GBAS成为4合1卡了,这样就节约了游戏烧录拷贝的时间,当然,128M的卡几个自然要高得多了。
四、操作接口:全新窗口下烧录接口(包含游戏上载,下载以及游戏记录文件上载下载功能)全新修正了游戏传输问题,更快速更准确,支持窗口 9X 作业平台,安装容易使用方便,使用者完全不用担心会出什么问题。
GBA的软件制作烧录系统—GBAS

简单入门-
一. GBA开发包--DevKitAdv 简介
DevKitAdv 主要包括两部分,一是GCC++编译器,二是 GBA库.

GCC++编译器功能和我们常用的VC差不多,只不过少了个编辑源代码的文本编辑器(至少我没发现,我用的是EditPlus,UltraEdit也可以),还有就是--不支持类(class),真是让人头痛,只能用struct来替代.它的作用是把我们写的代码编译成二进制的可执行文件,当然这个可执行文件是相对GBA和GBA模拟器而言的.就象Windows里的EXE文件无法在Mac机上使用是一样的道理;

GBA库提供了图像,控制及声音一系列的函数,和GCC++配合使用.

下载地址: http://occultforces.mine.nu/~darkfader/gba/files/devkitadv.zip

二. DevKitAdv 的安装

没啥好说的,解压后就可以直接使用,编译时设置DevKitAdv的路径就可以了,建议做一个批处理文件,比如 go.bat

set PATH=d:\devkitadv\bin;%PATH%

cmd (win98是command)

三. 最简单的 GBA 程序 (t1)

// main.c
// 一些基本数据类型
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
#define REG_DISPCNT *(u16*)0x04000000 // 显示寄存器地址
#define VRAM 0x06000000 // 图像缓冲区地址
#define M5_VRAM 0x0600A000 // M5缓冲区地址
#define BACKBUFFER 0x010 // 双缓冲/背缓冲地址
#define PALETTE 0x5000000 // 调色板地址
#define MODE_3 0x03 // 240*160 15bits/单缓冲区
#define MODE_4 0x04 // 240*160 8bits/双缓冲区
#define MODE_5 0x05 // 160*128 15bits/双缓冲区
#define BG2_ENABLE 0x0400 // BG_2
#define SetMode(Mode) REG_DISPCNT=(Mode) // 设置显示模式的宏定义

// ----------- 主程序 ------------
int main()
{
//设置屏幕模式,这里使用MODE_4
SetMode (MODE_4 | BG2_ENABLE);
}

1.MODE_5和MODE_3都是16bits,但MODE_3只有单缓冲,制作动画效果肯定没双缓冲好,因此排除MODE_3;

2.MODE_4是8bits,理论上256色对于掌机够用了,虽然16bits真彩的诱惑没有人想抗拒,可MODE_5只有160*128咧,在实际应用中建议还是使用MODE_4.

很简单吧--的确是的,现在要用GCC编译它:

gcc -lm -o main.elf main.c

obj -v -O binary main.elf main.bin

你会看目录下多了个"main.bin",这个就是能在GBA模拟器上执行的二进制文件!
教程中t1-t10目录为源程序目录,里面有个make.bat,修改代码后直接执行它就可以编译,但要注意我的devkitadv是装在D:,你要是装在别的盘就得改一下make.bat的path参数.

四. 在MODE_4背景层画图的 GBA 程序 (t2)

在GBA的MODE_4里画一幅图要经过3个步骤:

1. 把原始256色图像文件转换成 *.h / *.c 的数据文件,我们用的是 < BMP2GBA > ,这里以"image.bmp"为例,转换后我们就得到了一个"image.h"文件;

2. 在程序开头#include "image.h",这样就能在程序中使用"image.h"定义的调色板和图像数据;

3. 在程序中把"image.h"定义的调色板和图像数据写入MODE_4背景层的调色板和图像缓冲区.

另外,GBA还有专为精灵设置的物体层,它的用法和背景层一样,只是功能有点不一样,地址是0x06000000.有关用这里就不详细说了,大家可以把精灵数据直接输出到物体缓冲区就可以了.

下面是源程序:

... ...

// 包含图像调色板和数据的头文件
#include "gfx/image.h"

// ----------- 全局变量 --------
// 系统调色板
u16* palette_mem=(u16*)PALETTE;
// 图像缓冲区
u16* video_buffer=(u16*)VRAM;

// ----------- 函数定义 ---------
// MODE_4绘图函数
void Draw(u16* src_palette,u16* src_data,u16* dst_palette,u16* dst_data);

// ----------- 主程序 ------------
int main()
{

// 设置屏幕模式,这里使用MODE_4
SetMode (MODE_4 | BG2_ENABLE);

// 在背景层画图,Palette和Data是在"image.h"定义的调色板和图像数据数组名
Draw(Palette,Data,palette_mem,video_buffer);
}

// MODE_4绘图函数
void Draw(u16* src_palette,u16* src_data,u16* dst_palette,u16* dst_data)
{
int loop,x,y;

// 写入目的调色板
for(loop = 0; loop < 256; loop++)
dst_palette[loop] = src_palette[loop];

// 写入图像缓冲区
for(x = 0; x < 120; x++)
{
for(y = 0; y < 160; y++)
{
dst_data[(y) *120 + (x)]=src_data[(y) *120 + (x)];
}
}
}

编译后得到main.bin,然后在GBA模拟器里运行,就可以得到这样的结果:
五. 在MODE_5画图的 GBA 程序 (t3)

在GBA的MODE_5里画一幅图也要经过相似3个步骤,只不过不需要调色板数据:

1. 把原始真彩图像文件转换成 *.h / *.c 的数据文件,我们用的是 < Targa2GBA > ,这里以"image.bmp"(240*160)为例,DOS窗口下进Targa2GBA目录,输入"t2g mode5 image.bmp image.h",转换后我们就得到了一个"image.h"文件;

2. 在程序开头#include "image.h",这样就能在程序中使用"image.h"定义的图像数据;

3. 在程序中把"image.h"定义的图像数据写入图像缓冲区.

下面就是源程序:

// 包含图像数据的头文件
#include "gfx/image.h"

// ----------- 全局变量 --------
// 图像缓冲区
u16* video_buffer=(u16*)VRAM;

// ----------- 函数定义 ---------
// MODE_5绘图函数
void Draw(int x,int y,int w,int h,u16 *src_data,u16 *dst_data);

// ----------- 主程序 ------------
int main()
{
// 设置屏幕模式,这里使用MODE_5
SetMode (MODE_5 | BG2_ENABLE);

// 在背景层画图,image是在"image.h"定义的图像数据数组名
Draw(0,0,240,160,image,video_buffer);
}

// MODE_5绘图函数
void Draw(int x,int y,int w,int h,u16 *src_data,u16 *dst_data)
{
int i,o,idst;

// 把源图像数据复制到图像缓冲区的指定地方
idst =(y*160)+x;
for (i=0;i<h;i++)
{
for (o=0;o<w;o++)
{
if (*src_data != 0)
{
dst_data[idst] = *src_data;
}
idst++;
src_data++;
}
idst += (160-w);
}
}

编译后运行结果:
六. 全屏显示的 MODE_5 GBA 程序 (t4)

由于GBA不支持线性的图像变换,因此得到的结果会产生一些马赛克的现象,现在还是附上这个变换函数和最终结果,其实质量还是可以接受的,大家可以试试使用这个新的MODE_5.

// 切换到新MODE_5全屏模式,page为缓冲区,原理是把显示寄存器数据X,Y交换,得到128*160的显示,GBA就会全屏显示.
void SetFlipMode(int page)
{
u16 *ioreg=(u16*)0x4000000;

*ioreg=5+((page&1)>>4)+(1>>10);
ioreg[0x10]=0;
ioreg[0x11]=256;
ioreg[0x12]=128;
ioreg[0x13]=0;
}

int main()
{
// 设置屏幕模式,这里使用MODE_5
SetMode (MODE_5 | BG2_ENABLE);

// 切换模式
SetFlipMode(0);

// 在背景层画图,image是在"image.h"定义的图像数据数组名
Draw(0,0,240,160,image,video_buffer);

r七. GBA的双缓冲显示(t5)

大家在做上面MODEL_5的程序时一定会发现图像在闪动(第六节的240*160的MM象被破了相...),而MODEL_4下却比较稳定--这是因为MODEL_5下要处理16bits(实质上是15bits)的图像,数据量比MODEL_4下的8bits大很多,在没使用双缓冲的情况下,图像填充时就会造成闪烁,这就是为什么我们抛弃了MODEL_3的原因...

原理也很简单,图像在背缓冲区里填充好之后再直接输出到前缓冲区显示,程序里就是一个 "等待同步-> 交换缓冲" 的过程:

... ...
// ----------- 全局变量 --------
// 图像缓冲区
u16* video_buffer=(u16*)M5_VRAM;

// ----------- 函数定义 ---------
... ...

// 等待缓冲区数据同步
void WaitSync ();
// 交换缓冲区内容
void SwapScreen ();

// ----------- 主程序 ------------
int main()
{

// 设置屏幕模式,这里使用MODE_5
SetMode (MODE_5 | BG2_ENABLE);

while(1)
{
// 在背景层画图,image是在"image.h"定义的图像数据数组名
Draw(0,0,240,160,image,video_buffer);
WaitSync();
SwapScreen();
}
}

// 等待缓冲区数据同步
void WaitSync ()
{
while (*(volatile u16*)0x4000006<160) {};
}

// 交换缓冲区
void SwapScreen ()
{
if (REG_DISPCNT & BACKBUFFER)
{
REG_DISPCNT &= ~BACKBUFFER;
video_buffer = (u16*) M5_VRAM;
}
else
{
REG_DISPCNT |= BACKBUFFER;
video_buffer = (u16*) VRAM;
}
}

八. GBA 的按键输入(t6)

讲了老半天的图像,虽说是对着MM,但大家一定也有点烦了,我们现在就换个方向,来看看GBA的控制.

... ...
// 按键控制
#define KEY_A 1
#define KEY_B 2
#define KEY_SELECT 4
#define KEY_START 8
#define KEY_RIGHT 16
#define KEY_LEFT 32
#define KEY_UP 64
#define KEY_DOWN 128
#define KEY_R 256
#define KEY_L 512
volatile u32* KEYS = (volatile u32*)0x04000130;

// 包含图像调色板和数据的头文件
#include "gfx/image.h"

// ----------- 全局变量 --------
// 图像缓冲区
u16* video_buffer=(u16*)M5_VRAM;
// 图像显示坐标
int img_x,img_y;

// ----------- 函数定义 ---------
// 按键控制
void KeyAction();
... ...
// ----------- 主程序 ------------
int main()
{

// 设置屏幕模式,这里使用MODE_5
SetMode (MODE_5 | BG2_ENABLE);

while(1)
{
// 处理按键事件
KeyAction();
// 在背景层画图,image是在"image.h"定义的图像数据数组名
Draw(img_x,img_y,96,64,image,video_buffer);

WaitSync();
SwapScreen();
}
}

// 处理按键事件
void KeyAction()
{
// 上方向键
if(! ( (*KEYS) & KEY_UP) )
{
img_y+=5;
}

// 下方向键
if(! ( (*KEYS) & KEY_DOWN) )
{
img_y-=5;
}
}
eturn(0);
九. 简单声音输出(t7)

Simple is the Best(简洁至上),这里我们使用一个现成的声音模块(Troff Player,by Vova & Serge).这里还要用到一个转换工具< MOD2GBA >,用来把MOD音乐文件转换成GBA的 *.c / *.h 声音数据文件.MOD和MIDI差不多,但支持更多更强的效果.MOD可以由konvertor这个强大的软件转换而来.

// MOD数据文件
#include "song_data.h"
// MOD播放函数文件
#include "modplayer.h"

// ----------- 主程序 ------------
int main()
{
//设置屏幕模式,这里使用MODE_4
SetMode (MODE_4 | BG2_ENABLE);

// 初始化声音(声道数,音量)
InitSound(2, 7);
// 初始化音乐(节拍,循环)
InitSong(20000, 0);

while(1)
{
// 更新音乐播放状态
UpdateSong();
}
}

OK,就这么EZ.

十. 用图块建立可滚动/缩放/旋转的背景(t8)

这一节主要是源程序中注释为主,这里就不详细说明了."gba.h"包含基本宏定义,"maths.h"是sin/cos乘256后的值数组,"main.h"包括了我们定义背景结构及操作背景的函数.

程序中的地图背景是由不同的图块所构成,而这些图块统一紧挨着放在一个图像文件,这样每个图块就会有一个索引号;地图信息只要记录这张地图里共有多少个 单位(图块)以及每个单位对应的图块索引号就OK了,在例子中"gfx/tiles.h"就是图块大本营,而"gfx/level1.h"则是图块索引排列表.地图工具为"map editor beta 4".

背景的滚动/缩放/旋转是通过一系列的简单数学计算,修改GBA系统提供的一些背景属性来完成,因为是由硬件来完成背景的操作(MODE_1),所以速度很快,我还有个MODE_5下直接修改像素点位置来完成旋转的例程,待会儿大家可以比较一下.

‘柒’ gba上所有的3D游戏

嗯......007,疯狂出租车,马里奥赛车,GTA,类似于三D的还有黄金太阳(战斗模式应该是3D的)。
只想到这么多,实在不行你去TGBUS看看吧。www.tgbus.com/gba
马赛克是很严重哦~

‘捌’ 大型3D网络游戏是如何开发制作的

游戏开发中的程序开发主要由如下几个方面组成:
1.图形引擎
2.声音引擎
3.物理引擎
4.游戏引擎
5.人工智能或游戏逻辑
6.游戏GUI界面(菜单)
7.游戏开发工具
8.支持局域网对战的网络引擎开发
9.支持互联网对战的网络引擎开发

下面逐一介绍每个部分:
1.图形引擎主要包含游戏中的场景(室内或室外)管理与渲染,角色的动作管理绘制,特效管理与渲染(粒子系统,自然模拟(如水纹,植物等模拟)),光照和材质处理,LOD(Level Object Detail)管理等,另外还有图形数据转换工具开发,这些工具主要用于把美工用DCC软件(如3DS Max,Maya,Soft XSI,Soft Image3D等)软件制作的模型和动作数据以及用Photo shop或painter等工具制作的贴图,转化成游戏程序中用的资源文件。

2.声音引擎主要包含音效(Sound Effect简称SE),语音(VOICE),背景音乐(Background music简称BGM)的播放。SE是指那些在游戏中频繁播放,而且播放时间比较短,但要求能及时无延迟的播放,VOICE是指游戏中的语音或人声,这部分对声音品质要求比较高,基本上用比较高的采样率录制和回放声音,但和SE一样要求能及时无延迟的播放,SE在有的时候因为内存容量的问题,在不影响效果的前提下,可能会降低采样率,但VOICE由于降低采样率对效果影响比较大,所以一般VOICE不采用降低采样率的做法。BGM是指游戏中一长段循环播放(也有不循环,只播放一次)的背景音乐,正是由于BGM的这种特性,一般游戏的背景音乐是读盘(光盘或硬盘)来播放。另外一些高级声音特效,如EAX,数字影院系统(DTS5.1),数字杜比环绕等。

3.物理引擎主要包含游戏世界中的物体之间、物体和场景之间发生碰撞后的力学模拟, 以及发生碰撞后的物体骨骼运动的力学模拟(比较着名的物理引擎有havok公司的game dynamics sdk,还有open source 的ODE—Open Dynamics Engine)。

4.游戏引擎主要是把图形引擎、声音引擎、物理引擎整合起来,主要针对某个游戏制作一个游戏系统,其包含游戏关卡编辑器,主要用途是可以可视化的对场景进行调整,光照效果和雾化等效果调整,事件设置,道具摆放,NPC设置,另外还有角色编辑器,主要用于编辑角色的属性和检查动作数据的正确性。一般日本游戏公司的做法,他们会把关卡编辑器和角色编辑器直接做到游戏中,所有的参数调整都在游戏中通过调试菜单来进行编辑,所以一般他们把这部分调试菜单的功能做的很强大,同时在屏幕上实时的显示一些重要的信息,这样做的好处是关卡编辑器调整的效果直接就是游戏的效果,但是对于程序的重用性来说可能不是很好,比如说要用到另外一个游戏项目中就比较难,除非两个游戏类型相同,只要把场景和角色数据换一下,还有做下一代产品也没有问题,只要根据式样增加调试菜单的功能就可以了。

5.人工智能和游戏逻辑开发,这部分日本和欧美的游戏开发模式也有很大不同,在欧美游戏公司中运用脚本语言开发很普遍,所以这部分程序开发主要是用脚本语言编写,而且脚本程序和游戏程序的耦合性很低,有单独的编辑、编译和调试环境,这样比较利于游戏程序和关卡设计开发分开,同时并行开发,所以一般他们都会有专门做关卡设计的程序员岗位。而日本游戏公司脚本语言一般和游戏的耦合性比较高,一般通过一些语言的宏功能和一些编译器的特定功能来完成一个简单的脚本系统,所以一般这些脚本程序只能在游戏程序中进行调试,而不能在一个单独的脚本编辑,编译环境中进行开发。

6.游戏GUI界面(菜单),主要是指那些游戏中用户界面设计,有做的复杂,有简单的,做的简单就是2D GUI界面,做的复杂有3D GUI界面。

7.游戏开发工具主要包含关卡编辑器,角色编辑器,资源打包管理,DCC软件的插件工具等开发。

8.支持局域网对战的网络引擎开发,主要解决局域网网络发包和延迟处理,通讯同步的问题,有同步通讯和异步通讯两种做法,异步通讯用于那些对运行帧速要求比较高的游戏,同步通讯相对异步通讯来说效率相对低,但是同步通讯的编程模型相对异步通讯来得简单一些。

9.支持互联网对战的网络引擎开发,目前大部分网游都是C/S结构的,服务器端软件配置管理,服务器程序的最优化,还有游戏大厅、组队、游戏逻辑处理、道具管理、收费系统等。另外还有一些网络系统是C/S和P2P两种结构混合的,如XBOX Live等.

‘玖’ 3d游戏的地图是怎么做出来的,怎么实现的

你可以先去【绘学霸】网站找“游戏设计/游戏制作”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y17r-1897197232727009580

想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。

自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-11y17r-1897197232727009580

在“游戏设计/游戏制作”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。

大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载: www.huixueba.com.cn/Scripts/download.html

‘拾’ 什么是GBA

2000年8月28日任天堂在NINTENDO SPACE WORLD 2000会场内展出她的下一代手掌游戏机----GAMEBOY ADVANCE!大家在2001年3月21日玩到这部首部在21世纪推出手掌游戏机。由90年代开始,GAMEBOY一直是"手掌机"的代表者。低廉的格价、大量及多元化的游戏、耗电量不大、加上是任天堂出品(当时任天堂可是游戏界霸者),所以即使只是黑白画面亦能打败同期机能较强的GAMEGEAR和GT。甚至十年后的今日,SNK的NEOGEO POCKET亦不敌于GAMEBOY。即使优势持续,但机能不足加上手掌机层出不穷,所以GAMEBOY亦推出不少"进化机种",最瞩目的是可以显示彩色的GAMEBOY COLOUR。可是由于近期BANDAI的WONDER SWAN势不可挡,加上GAMEBOY的机能严重不足,任天堂也只好发表后继机"GAMEBOY ADVANCE"。那么,究竟此机能否继续GAMEBOY的优势呢?

GBA外观:

A : A 键 B : B 键 C : 开 始 键
D : 选 择 键 E : 液 晶 屏 幕 F : 扬 声 器
G : 电 源 显 示 灯 H : 干 电 池入 口 I : 游 戏 卡 匣 插 口
J : 扩 充 插 口 K : 电 源 开 关 L : L 键
N : 耳 机 插 口 M : 音 量 调 节 O : 索 带 位 置
R : R 键

主机资料
屏 幕 : 反 射 型 TFT 液 晶 屏 幕
画 面 面 积 : 40.8mm X 61.2mm ( 对 角 2.9 吋 )
解 像 度 : 240 X 160 点
同 时 发 色 数 : 32000 色
中 央 处 理 器 : 32bit RISC-CPU + 8 bit CISC-CPU
记 忆 体 : 2k byte WRAM
96k byte VRAM ( CPU 内 置 ) 256k byte VRAM( CPU 外 部 )
音 效 : 小 型 喇 叭 , 附 耳 机 插 口
通 讯 机 能 : GBA 专用 通 讯 电 缆 ( 对 战 线 ) 可 供 最 多 四 人 进 行 对 战
对 应 MOBILE SYSTEM GB 可 供 上 网 用 途
电 源 : 2 粒 单 3 型 ( AA ) 干 电 池 可 提 供 15 小 时 电 力
GBA 专 用 充 电 池
耗 电 量 : 约 0 . 6 W
主 机 体 积 : 144.5mm( 长 ) X 110mm ( 阔 ) X 24.5mm ( 厚 )
主 机 重 量 : 约 140g
对 应 软 件 : GBA ADVANCE 专 用 卡 匣
兼 容 GBA 、 GBA COLOUR 卡 匣
发 售 日 与 售 价 : 2001 年 3 月 21 日/ 9800 日 圆

GBA硬件的注意事项和维护事项
1.不得拆卸或者试图修理GBA或者GBA部件,有关GB的换壳附件请尽量不要使用.
2.在装入或者取出游戏卡之前,应该切断GBA的电源.应将游戏卡完全插入.不得强行对游戏卡或者GBA施加外力.

3.不得将GBA放在潮湿处.也不得放在楼面或者肮脏,有粉尘和细屑等环境中.GBA仅可以在湿度低的房间(例如起居室)中使用.不得在浴室卫生间,厨房以及其他可能溅到水的潮湿环境下使用.

4.不得落下,撞击或者滥用GBA或者附件.

5.务必仔细连接GBA,将插头插入到正确位置.当向插座插入时,应保持插头的直状态.

6.当从GBA或者电源插座取下各插头时,应首先切断GBA的电源.然后小心的拉插头,不得用脚踩,强拉或者弯折电线或者电缆.

7.不得使得GBA,游戏卡或者任何GBA部件受到高温或者低温.在低温环境下,液晶显示屏(LCD)的显示速度将下降或者无法工作.在高温下LCD将损坏.应注意不得使得GBA长时间受到阳光的直射.

8.与硬物接触或者受压将损坏LCD.应极力注意保护显示屏,防止划伤或者弄脏.

9.仅可以向延伸接口连接为GBA设计的专用附件.

10.不得将液体洒在GBA,游戏卡以及其他GBA部件上.应使用微湿的软布进行清洁.重新使用之前,应该使得部件完全干燥(仅可以使用水).

11.不得快速反复接通和切断电源开头,否则将缩电池的寿命,并且将进入电池备份游戏卡状态,丢失存储的信息.

12.为了获得最佳的游戏图像,应在良好的光线下,从下面直接观看GBA的显示屏进行操作.

13.为了防止GBA被弄脏以及防止灰尘进入,在不使用时应经常装入一枚游戏卡(切断电源).

热点内容
绝地求生未来之役比赛为什么进不去 发布:2023-08-31 22:07:08 浏览:1456
dota2位置什么意思 发布:2023-08-31 22:00:04 浏览:896
lol电竞是什么样子 发布:2023-08-31 21:58:40 浏览:1357
绝地求生八倍镜的那个圆圈怎么弄 发布:2023-08-31 21:58:31 浏览:1445
lol龙龟一个多少金币 发布:2023-08-31 21:55:07 浏览:805
王者如何改游戏内名称 发布:2023-08-31 21:55:06 浏览:1090
游戏主播打广告是什么意思 发布:2023-08-31 21:55:06 浏览:1788
绝地求生如何免费拿到ss7赛季手册 发布:2023-08-31 21:52:13 浏览:973
pgg是哪个国家的战队lol 发布:2023-08-31 21:52:07 浏览:855
一个人的时候才发现游戏很没意思 发布:2023-08-31 21:49:24 浏览:1490