gba上的3d游戲如何實現的
『壹』 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被弄臟以及防止灰塵進入,在不使用時應經常裝入一枚游戲卡(切斷電源).