JGE++

JGE++(Jas Game Engine++)是一套有硬體加速的PSP的2D遊戲引擎,支持WINDOWS下的跨平台開發。包括完整的遊戲製作步驟:編碼、DEBUG和測試,都可以在 WINDOWS下進行。開發者也可以開發WINDOWS遊戲,不過主要平台還是PSP。JGE++ 就是一個利用GU庫寫成的2D遊戲引擎,GU庫的原本用途是用作編寫3D遊戲,我們把它套用在2D遊戲上,就可以享用硬體加速所帶來的種種好處,例如運行速度的提升,著色/半透明色效果,圖像放大縮小和旋轉等。

JGE++(Jas Game Engine++)是一套有硬體加速的PSP的2D遊戲引擎,支持WINDOWS下的跨平台開發。包括完整的遊戲製作步驟:編碼、DEBUG和測試,都可以在 WINDOWS下進行。開發者也可以開發WINDOWS遊戲,不過主要平台還是PSP。JGE++ 就是一個利用GU庫寫成的2D遊戲引擎,GU庫的原本用途是用作編寫3D遊戲,我們把它套用在2D遊戲上,就可以享用硬體加速所帶來的種種好處,例如運行速度的提升,著色/半透明色效果,圖像放大縮小和旋轉等。JGE++ 基本上可以說是一個跨平台遊戲引擎,寫好的遊戲,可分別編譯成WINDOWS版和PSP版。JGE++ 在WINDOWS上是用了一個叫HGE的遊戲引擎(需要DIRECTX8.0以上)作為根基。而PSP版則依然要安裝了PSPSDK才可以編譯。

硬體加速功能包括:

縮放、滾轉、色彩混合。

動畫精靈。

幾何體渲染,包括三角形、 圓形、矩形和粗線。

讀取PNG.JPEG和GIF圖片

點陣圖字型

中文GBK字型

True Type 字型

立體聲WAV回放

硬體MP3解碼

資源管理器

ZIP格式資源支持

使用XML腳本進行渲染

基本的3D函式,包括渲染帶貼圖的三角形,QUAKE2(MD2)模型和OBJ模型

讓我們先看一下 JGE++ 和 JGE++ 應用程式的目錄結構:

Code:

______JGE

|___Demo

|___bin

|___Debug

|___JGEFramework

|___Release

|___src

|___GameApp.cpp

|___GameApp.h

其中 GameApp.cpp 和 GameApp.h 就是所有 JGE++ 應用程式的主要部份.

因為暫時還沒有VC6.0 建立 JGE++程式的嚮導,當大家想寫自己的遊戲時,最方便的辦法,就是拿Demo的 GameApp.cpp 和 GameApp.h 來作更改.

看一下GameApp.h 就知道JGE++程式的結構很簡單:

Code:

GameApp(JGE *engine);

virtual ~GameApp();

virtual void Create(); // 設定變數/載入圖,音樂等

virtual void Destroy(); // 釋放有關物件等

virtual void Update();  // 更新有關變數/用戶操控

virtual void Render();  // 顯示更新

參考GameApp.cpp,我們就更可以進一步了解實際的情況:

Code:

void GameApp::Create()

{

// 載入貼圖

mTexture = mEngine->LoadTexture("Res/mario.png", true);

// 設定卡通角色的貼圖範圍

mMario = new JQuad(mTexture, 0.0f, 0.0f, 62.0f, 72.0f);

// 設定貼圖範圍的中心點

mMario->SetHotSpot(31.0f, 36.0f);

// 設定"Hello World!"的貼圖範圍

mHello = new JQuad(mTexture, 0.0f, 100.0f, 128.0f, 28.0f);

// 設定貼圖範圍的中心點

mHello->SetHotSpot(64.0f, 14.0f);

// 載入音樂和播放

mMusic = mEngine->LoadMusic("Res/smarioa.mod");

mEngine->PlayMusic(mMusic);

// 載入點陣字型

mFont = new JLBFont("Res/f3", 16, true);

// 設定有關變數

mScale = 1.0f;

mAngle = 0.0f;

mDelta = 0.001f;

}

void GameApp::Destroy()

{

// 釋放有關物件

if (mTexture)

mEngine->FreeTexture(mTexture);

if (mMario)

delete mMario;

if (mHello)

delete mHello;

if (mMusic)

mEngine->FreeMusic(mMusic);

if (mFont)

delete mFont;

}

void GameApp::Update()

{

// 按"△"截圖

if (mEngine->GetButtonClick(PSP_CTRL_TRIANGLE))

{

char s[80];

sprintf(s, "ms0:/screenshot.png");

mEngine->ScreenShot(s);

}

// 按"X"退出

if (mEngine->GetButtonClick(PSP_CTRL_CROSS))

{

mEngine->End();

return;

}

// 拿出由上一次更新到現在相隔的時間

float dt = mEngine->GetDelta();

// 更新有關變數

mAngle += 0.001f*dt;

if (mAngle > M_PI*2.0f)

mAngle = 0.0f;

mScale += mDelta*dt;

if (mScale > 2.0f || mScale < 0.5f)

{

mDelta *= -1;

mScale += mDelta*dt;

}

// 下面只是調試用,可以不用理會

mEngine->printf("FPS:%6.2f", mEngine->GetFPS());

}

void GameApp::Render()

{

// 設定四個點的顏色

PIXEL_TYPE colors[] =

{

ARGB(255,0,0,255),

ARGB(255,62,114,189),

ARGB(255,255,255,255),

ARGB(255,255,255,255)

};

// 以渲染方式清除背景

mEngine->FillRect(0.0f, 0.0f, SCREEN_WIDTH_F, SCREEN_HEIGHT_F, colors);

// 貼上卡通角色

mEngine->RenderQuad(mMario, 80.0f, 80.0f);

// 貼上卡通角色同時改變它的角度和大小

mEngine->RenderQuad(mMario, 400.0f, 80.0f, 1.0f, 1.2f, 1.2f);

// 貼上卡通角色同時旋轉角度

mEngine->RenderQuad(mMario, 80.0f, 200.0f, mAngle, 1.0f, 1.0f);

// 設定渲染顏色再貼圖

mMario->SetColor(ARGB(128,255,255,0));

mEngine->RenderQuad(mMario, 380.0f, 150.0f, 0.0f, mScale, mScale);

// 重設默認顏色

mMario->SetColor(ARGB(255,255,255,255));

// Hello world!

mEngine->RenderQuad(mHello, SCREEN_WIDTH_F/2.0f, SCREEN_HEIGHT_F/2.0f, 0.0f, mScale, mScale);

// 顯示字串

mFont->SetColor(ARGB(255,255,255,0));

mFont->DrawString("JGE++ Demo", 240.0f, 20.0f, JGETEXT_CENTER);

}

利用JGE++寫遊戲的最大好處是我們可以利用VC6.0,在WINDOWS上測試和調試,不用每個小更改,都要弄上去PSP去試,更不用擔心把PSP鎖死而要拆電池了!至於用VC6.0 Debugger來調試的好處,在下更是不用多說了!

相信大家現在都對JGE++ 有點初步了解了,一起用它來寫遊戲吧!

相關詞條

熱門詞條

聯絡我們