2D遊戲引擎(十) 增強遊戲引擎中的子畫面

2021-04-19 07:13:23 字數 1353 閱讀 2575

在2d遊戲中,如何對不需要的動畫子畫面進行自動隱藏或刪除?例如,當乙個**子畫面的幀動畫結束後,需要對此子畫面進行刪除操作。另外對此前的遊戲引擎中,除了對邊界動作為ba_die的子畫面可以對其刪除外,還沒有提供乙個在一些特定時刻需對子畫面物件進行刪除操作的方法,比如碰撞時需要刪除互相碰撞的兩個子畫面。

首先向sprite.h中新增2個成員變數。

bool          m_bdying;     //標記乙個子畫面是否刪除

bool          m_bonecycle;  //標記是否顯示所有幀之後刪除子畫面

sprite()建構函式對其初始化

m_bdying = false;

m_bonecycle = false;

給出乙個訪問方法,這個方法是刪除任何子畫面的一種簡單有效的方法。

void                  kill()      ;            //任何子畫面物件呼叫此方法,都會對刪除該子畫面做好準備

//sprite.cpp

spriteaction sprite::update()

在對子畫面進行更新時,若子畫面已經呼叫過kill()方法,則返回子畫面的sa_kill行為,在gameengine.cpp中會做出相應的刪除子畫面操作,該操作已經在前面的引擎中給出,這裡不再贅述。

另外一種情況是子畫面在一次迴圈繪製幀動畫後自動消失。修改**如下:

//sprite.h

inline void sprite::updateframe()}}

成員變數m_bonecycle在setnumframes()方法中設定

//sprite.h

inline void sprite::setnumframes(int inumframes, bool bonecycle)

該方法的宣告修改如下:

void    setnumframes(int inumframes, bool bonecycle = false);

對其餘須設定幀數的方法沒有影響,只對需要一次迴圈後消失的子畫面有效,傳入的第2個引數為true即可。

最後新增1個遊戲函式:

//gameengine.h

void spritedying(sprite* pspritedying);   //新增遊戲函式

在對子畫面刪除前呼叫它,為什麼要這樣做呢?可以看作是破壞子畫面的後果。比如當飛彈子畫面撞上行星子畫面,行星子畫面消失後會產生**聲及**子畫面,所以在這個函式中就可以進行這些操作。

以下是呼叫:

//gameengine.cpp

void gameengine::updatesprites()

...}

定義該函式的操作在特定的遊戲**中。

2D開源遊戲引擎調研報告(二)

二 panda3d 0.基本介紹 panda3d是由迪士尼參與開發的開源3d遊戲引擎 只有函式庫,通過在python c 檔案中呼叫函式庫進行開發 官網 教程資源 安裝引擎時會附帶28個demo,展示了引擎的使用方式和特點,並附有非常詳細的注釋 分步驟介紹了乙個小遊戲的製作過程和所需 官網上的教程,...

使用Libgdx遊戲引擎做的2D橫版過關遊戲

iibgdx可以解析tiled這個軟體生成的地 件,地 件是xx.tmx檔案 tiledmap map 地圖 orthocachedtiledmaprenderer otrender 地圖繪製類 orthographiccamera camera 相機 這3個類聯合處理,才讓tmx中的地圖資訊展示到...

開源跨平台2D遊戲引擎Love2D介紹

love2d是乙個開源的,跨平台的2d遊戲引擎。使用純lua指令碼來進行遊戲開發。目前支援的平台有windows,mac os,linux。另外在社群裡,還有love2d android版本,而且也有進軍ios的計畫。這個遊戲引擎在國內聽說或者是使用的人可能不是很多,但是在國外還是有很大一部分的使用...