掌叔
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 的打包内.