词条 | JGE++ |
释义 | 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++ 有点初步了解了,一起用它来写游戏吧! |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。