遊戲製作相關---HAM教程翻譯本(五)(轉)
遊戲製作相關---HAM教程翻譯本(五)(轉)[@more@] 到了第11天我將說明怎麼旋轉背景。 HAM 做這個很簡單,只要用 RotBgEx() 函式。這個函式十分強大,它不僅能旋轉背景還能放大縮小還有捲動背景。注意: 還有一個叫做 RotBg() 的函式, 但是我更喜歡 RotBgEx() 因為你除了旋轉還可以控制更多。 噢,不要忘了。你只能在模式1和模式2中旋轉。 在模式1中,背景2可以旋轉/縮放。在模式2中,背景2和背景3可以旋轉/縮放。如果你忘了請再看一下 Day 1 。 用下面這句轉換圖片:gfx2gba -fsrc -m -protate.pal -rs -t8 rotate.bmp 你的 gfx 資料夾下會有下面這些檔案:rotate.map.crotate.pal.c rotate.raw.c 下面看程式碼: // 主要 HAM 庫#include "mygba.h" // 包含圖形標頭檔案// gfx2gba -fsrc -m -protate.pal -rs -t8 rotate.bmp#include "gfx/rotate.map.c" #include "gfx/rotate.pal.c" #include "gfx/rotate.raw.c" // 全域性變數u32 frames = 0; u32 zoomx = 256; // X co-ordinate of zoom centeru32 zoomy = 256; // Y co-ordinate of zoom centeru32 scrollx = 64; // X co-ordinate of scrolling centeru32 scrolly = 64; // Y co-ordinate of scrolling centerbool zoomin = 1; // 函式宣告void vblFunc(); // 中斷函式VBLvoid query_keys(); // 檢查按鍵狀態void redraw(); // 重畫螢幕 // Main主函式int main() { // 初始化 HAMlib ham_Init(); // 設定背景模式為Mode1 ham_SetBgMode(1); // 初始化調色盤 ham_LoadBGPal(&rotate_Palette,256); // 背景調色盤 // 初始化轉動的背景 ham_bg[2].ti = ham_InitTileSet(&rotate_Tiles,SIZEOF_16BIT(rotate_Tiles),1,1); ham_bg[2].mi = ham_InitMapSet(&rotate_Map,256,0,1); // 顯示背景 ham_InitBg(2,1,1,0); //移動背景到螢幕中央 ham_RotBgEx(2,0,120,80,scrollx,scrolly,zoomx,zoomy); // 開啟 VBL 中斷函式 ham_StartIntHandler(INT_TYPE_VBL,&vblFunc); while(1) { // 死迴圈 } return EXIT_SUCCESS; } // 主程式尾 // 中斷函式VBL void vblFunc() { ham_CopyObjToOAM(); // 把 精靈 複製到記憶體的OAM中 query_keys(); // 檢查按鍵 redraw(); // 重畫飛機 // 旋轉背景 ham_RotBgEx(2,frames%360,120,80,scrollx,scrolly,zoomx,zoomy); // 幀自增1 ++frames; return; } // End of vblFunc() // 檢查按鍵 void query_keys() { // 只按RIGHT鍵 if (F_CTRLINPUT_RIGHT_PRESSED) { if (scrollx < 127) ++scrollx; } // 只按LEFT鍵 if (F_CTRLINPUT_LEFT_PRESSED) { if (scrollx > 0) --scrollx; } // 只按START鍵 if (F_CTRLINPUT_START_PRESSED) { scrollx = 64; scrolly = 64; } return; } // End of query_keys() // 重畫螢幕 void redraw() { if (zoomin) { // 放大 if (zoomx != 396) { zoomx+=2; zoomy+=2; } else { zoomin = FALSE; } } else { // 縮小 if (zoomx != 116) { zoomx-=2; zoomy-=2; } else { zoomin = TRUE; } } return; } // End of redraw() 程式碼解釋 // 全域性變數 u32 zoomx=256;u32 zoomy=256;這兩個分別表示在X方向和Y方向的縮放量。在HAM文件中,你可以看到作者用0x100(=256)表示沒有縮放。 數字增加放大,反之減小。 u32 scrollx=64;u32 scrolly=64;這兩個變數對應影像的旋轉軸的X和Y座標。這次我全設定成64代表旋轉軸在影像中心(原始影像大小為128x128象素)。當心,不要嘗試把座標定在影像的邊界外。我們待會再詳細說明。 // Main() 你將會注意到這次我載入背景的方法跟前幾天不同。這次的方法更短,儘管兩種方法都可以。// 初始化旋轉背景ham_bg[2].ti = ham_InitTileSet(&rotate_Tiles,SIZEOF_16BIT(rotate_Tiles),1,1);這個呼叫剛好一樣,下面的部分就不同了。ham_bg[2].mi = ham_InitMapSet(&rotate_Map,256,0,1);第一個引數就是背景map陣列。接下來就是“將要複製到BG視訊記憶體中的Tile大小,是個16位數字。”下一個數字是建立在最後一個引數 (是否為可旋轉)的基礎上的。所以128x128大小的影像做旋轉背景對應的數字是0。最後的的引數是1,因為是旋轉背景。 注意: 你可以用下面的程式碼完成同樣的事: // 變數 map_fragment_info_ptr bg_rotate; // 背景指標 // 為影像安裝tile ham_bg[2].ti = ham_InitTileSet(&rotate_Tiles,SIZEOF_16BIT(rotate_Tiles),1,1); // 安裝map ham_bg[2].mi = ham_InitMapEmptySet(0,1); bg_rotate = ham_InitMapFragment(&rotate_Map,16,16,0,0,16,16,1); ham_InsertMapFragment(bg_rotate,2,0,0); // 顯示背景 ham_InitBg(2,1,0,0); // 移動背景到中央 ham_RotBgEx(2,0,120,80,scrollx,scrolly,zoomx,zoomy); 這是RotBgEx() 函式的隱含工作。就像我說的,這是個功能很強的函式。我現在只用它把背景移到中央,而沒有旋轉。我待會會在VBL中斷函式中旋轉並且解釋引數。 // VBL function // 旋轉背景 ham_RotBgEx(2,frames%360,120,80,scrollx,scrolly,zoomx,zoomy); Okay, 現在的這個才是真正的旋轉(和縮放)。 第一個引數代表背景號。(它只能是2或3,因為背景0和1不能旋轉) 。接下來的是旋轉的角度。frames%360 的值會在 0 ? 359間。 再接下來的是旋轉中心的X和Y座標。我使它位於120,80幾乎是螢幕的中心。在這裡停一下以確定你真的明白了。這就是影像將要繞著轉的點。然後你傳遞的X和Y座標是卷軸的偏移量。這就是旋轉中心點在影像上位置。我選擇了64,64 (又幾乎是影像的中心)。多花了一些時間得到一個合適的圖片。圖片的中心將會跟著螢幕的中心轉。最後你傳入X方向上的縮放和Y方向上的縮放。它從256開始算起(或者是十六進位制的 0x100),意思是沒有縮放。如果你看了重畫函式,你將會看到怎麼修正zoomx 和 zoomy 。 // query_keys() if (scrollx < 127) ++scrollx;if (scrollx > 0) --scrollx;當演示程式執行時,使用者可以按 左 或 右 來移動影像的旋轉中心點。比方說,如果你一直按 左,影像將會圍繞中間左側旋轉。注意字母'R'接近中心。如果你按 右 鍵,影像將會繞左側旋轉,接近中心的是字母'e'。 噢,如果你按了 Start 鍵將會回到中心。 // redraw() 這裡的這段程式碼不難。我設定了最大的縮放在116和396之間。當到達了界限時,我把放大改成縮小,或把縮小改成放大。 啊,今天就到這裡吧。下一天,下一節精彩的課將關於用HAM編GBA程式的精美藝術。 你毫無疑問應該在學習第十二課以前,盡你所能修改今天的程式碼,看看RotBgEx() 函式的所有功能。 HAM教程第十二天翻譯本 我想是時候學一種簡單且依然很酷的特效――馬賽克。今天我們做馬賽克用在sprite上,明天我們再把它同背景核對。今天的大部分程式碼將會跟第八天和第十天相似。 注意: 我的圖片是從這裡免費得到的。 控制:Up ? 馬賽克縱向增大Down ? 馬賽克縱向減小Left ? 馬賽克橫向減小Right ? 馬賽克橫向增大Start ? 復位到沒有馬賽克 // The Main HAM Library #include "mygba.h" // Graphics Includes #include "gfx/background.pal.c" // Created from water.bmp #include "gfx/object.pal.c" // Created from ship.bmp #include "gfx/ship.raw.c" // gfx2gba -D -fsrc -pobject.pal -t8 ship.bmp #include "gfx/water.map.c" // gfx2gba -fsrc -m -pbackground.pal -t8 water.bmp #include "gfx/water.raw.c" // Global Variables u8 ship[1]; // Sprite index for the ship u8 new_frame = 0; // 0 = true, 1 = false u16 curr_frame = 1; // Current frame u8 mosaic_h = 0; // Mosaic horizontal amount u8 mosaic_v = 0; // Mosaic vertical amount // Function Prototypes void vblFunc(); // VBL function void query_keys(); // Query for input void redraw(); // Redraw sprites // Main function int main() { // Variables map_fragment_info_ptr bg_water; // Pointer to our background // Initialize HAMlib ham_Init(); // Setup the background mode ham_SetBgMode(1); // Initialize the palettes ham_LoadBGPal(&background_Palette,256); // Background palette ham_LoadObjPal(&object_Palette, 256); // Sprite palette <
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951727/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遊戲製作相關---HAM教程翻譯本(四)(轉)遊戲
- 遊戲製作詳解自----OpenGL入門教程(五)(轉)遊戲
- [譯] 使用 Flutter 製作 3D 翻轉動畫Flutter3D動畫
- 動作遊戲的本質及相關設計方法論遊戲
- ppt製作的翻書效果及教程
- SAP Spartacus Translation(翻譯) 相關話題
- 遊戲修改器製作教程五:OllyDBG和其他除錯工具遊戲除錯
- initrd解壓和相關製作
- 【電子沙漏】製作相關例程
- 遊戲製作詳解自----OpenGL入門教程(九)(轉)遊戲
- 遊戲製作詳解自----OpenGL入門教程(四)(轉)遊戲
- 使用Urllib2製作有道翻譯器
- Yurii談翻譯(五)怎樣翻譯更地道:so…that…的翻譯
- 翻譯 | SpringBoot相關的面試問題Spring Boot面試
- Flutter遊戲引擎Flame -- 教程翻譯和例子解析Flutter遊戲引擎
- [翻譯] 用 CSS 背景混合模式製作高階效果CSS模式
- [翻譯]Play框架1.2.7版本教程(8) - 新增驗證框架
- 遊戲製作之我見:) (轉)遊戲
- EA:五年之內不製作VR遊戲VR遊戲
- 關於單機遊戲製作中的物件重用問題(轉)遊戲物件
- [翻譯 EF Core in Action 2.4] 載入相關資料
- python製作查詢單詞翻譯的指令碼Python指令碼
- ZooKeeper 官方教程[翻譯]
- [翻譯]CMAKE官方教程
- 翻譯完了一本書
- 求 PHP 轉 java 的相關教程PHPJava
- Webpack4系列教程(五) 圖片相關配置Web
- [翻譯]關於通用文件轉換器Pandoc
- 有關RFC文件的翻譯說明 (轉)
- Dreamweaver製作簡易的拼圖遊戲教程遊戲
- Java 相關的編譯技術(轉)Java編譯
- NetworkX教程中文翻譯
- 完成遊戲策劃設計製作的關鍵:推動力(轉)遊戲
- [翻譯]程式設計師需要掌握的6項相關技能程式設計師
- 囊括多項年度最佳遊戲!《黑帝斯》製作團隊談論本作起源遊戲
- 翻譯:EJB in a Nutshell (轉)
- 中國遊戲行業市場分析(一)關於國內遊戲製作的問題 (轉)遊戲行業
- Electron教程翻譯2:安裝