超級瑪麗製作揭秘3 遊戲背景類MYBKSKY

2021-04-20 01:41:15 字數 1204 閱讀 3657

類說明:這是乙個專門處理遊戲背景的類。在橫版遊戲或射擊遊戲中,都有乙個背景畫面,如山、天空、雲、星空等等。這些一般只有1到2倍螢幕寬度,然後像乙個卷軸一樣迴圈移動,連成一片,感覺上像一張很長的。這個類就是專門處理這個背景的。在超級瑪麗增強版中,主要關卡是3關,各有一張背景;從水管進去,有兩關,都用一張全黑。共四張圖。這四張圖大小一致,縱向排列在乙個位**件中。mybksky這個類,派生於mybitmap。由於背景只需要完成迴圈移動的效果,只需要實現乙個功能,而無需關心其他任何問題(例如控制代碼、dc)。編碼起來很簡單,再次反映出物件導向的好處。

技術原理:

怎樣讓一張像卷軸一樣不停移動呢?很簡單,假設有一條垂直分割線,把分成左右兩部分。先顯示右邊部分,再把左邊部分接到末尾。不停移動向右移動分割線,就會迴圈地顯示。

成員函式功能列表:

class mybksky:public mybitmap

;函式具體實現都很簡單,例如:

void mybksky::drawrollstretch(int x,int y, int id)

使用舉例:

定義 mybksky bmsky;

初始化mario01/mario01.cpp(234): bmsky.init(hinstance,idb_bitmap_map_sky,1,4);

mario01/mario01.cpp(235): bmsky.setdevice(hscreen,hmem,gamew*32*max_page,gameh*32);

mario01/mario01.cpp(236): bmsky.setpos(bm_user,0,0);

遊戲過程中顯示

mario01/mario01.cpp(366):    bmsky.drawrollstretch(2,2,gamemap.mapinfo.ibackbmp);

每隔一定時間,移動分割線

mario01/mario01.cpp(428):     bmsky.moveroll(sky_speed);//雲彩移動

以下兩處與玩家角色有關:

當玩家切換到一張新地圖時,重新整理背景的座標

mario01/gamemap.cpp(314):  bmsky.setpos(bm_user,viewx,0);

當玩家向右移動時,重新整理背景的座標

mario01/gamemap.cpp(473): bmsky.setpos(bm_user,viewx,0);

至此,遊戲背景的功能就做完了。

超級瑪麗製作揭秘25類GAMEMAP 全域性變數

所有遊戲資料都需要封裝到實際的變數中。整個遊戲,就是用類gamemap表示的。成員函式功能列表 class gamemap 所有的資料都儲存到一系列全域性變數中 所有選單文字 char ppretext 所有動態元素的寬 高 int mapani 2 10 所有地圖物品的寬 高 int mapsol...

超級瑪麗製作揭秘5魔法攻擊 類MYANIMAGIC

類說明 玩家有兩種攻擊方式 普通攻擊 子彈 魔法攻擊 旋風 這個類是專門處理旋風的。我最初的想法是用一些特殊的bitblt方法製造特效,例如或 與 異或。試了幾次,都失敗了。最後只能用 先與後或 的老方法。這個類可看成myaniobj的乙個簡化版,只支援不規則的顯示。成員函式功能列表 class m...

《超級瑪麗》3

第三階段 目標 實現水平方向和豎直方向上的碰撞,更具有真實感。1 要想解決水平方向的碰撞,就要先明白乙個問題,地圖上的哪些東西是不能夠穿過的,也就是說要先定義好地圖上的某些可供碰撞檢測的物體磚塊型別。如圖 水平檢測函式的開頭準備工作 為了簡化水平方向的檢測,因為馬里奧的錨點是中心位置,所以左右兩邊的...