[JGE++教程] 第1篇: Hello World!



掌叔
2008-06-09 09:00:37

摘自:bbs.khors.com
作者:Dr.Watson

像所有的编程教程一样, 第1篇, 先和大家利用JGE++写个简单的HELLO WORLD吧!(也就是在代码包内的Demo)让我们先看一下 JGE++ 和 JGE++ 应用程序的目录结构:

______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++程序的结构很简单:

GameApp(JGE *engine);

virtual ~GameApp();

virtual void Create(); // 设定变数/载入图,音乐等

virtual void Destroy(); // 释放有关物件等

virtual void Update();  // 更新有关变数/用户操控

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

参考GameApp.cpp,我们就更可以进一步了解实际的情况:

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++ 有点初步了解了,一起用它来写游戏吧 [s:1]

注意:代码在 JGE++ V0.1.0 的打包内.