掌叔
2008-06-10 09:13:28
摘自:[url]http://blog.sina.com.cn/vcbear[/url]
作者:vcbear
很久之前,就在论坛上看到网友newcreat开发的NGE库,但苦与cygwin环境没有装好,就一直没有试,今天看到newcreat又发了新的开发整合包,拉下来试了下,果然是方便很多。NGE采用改进了图形系统的sdl.所有代码遵循GPL发布.
NGE完全延续了sdl的所有东西,它替换了sdl的显示系统,在windows下采用opengl实现,在psp下直接采用gu实现,这样达到最大的显示效率.提供了一套一致的接口,这个确实是很方便,比提心吊胆的在PSP上用printf除虫好多了,有了它,这样一份代码可以在windows和psp 下都可以运行,不用做任何的修改.开发人员在windows下开发并且调试,最后只需在发布的时候编译一份psp版的发布就行了,可以完全抛弃psp.
下面就是newcreat写的第一个例子程序,这个程序将显示一张图片,这张图片是任意大小的,这里用的480*272,按不同的键可以使图片放大,缩小,旋转或者平移.
以下是源代码:
-------------------------------------------------------------------------
#pragma warning(disable : 4786)
#include "libnge.h"
#include
SDL_Joystick* joystick; //摇杆指针
SDL_Event event; //用于消息队列
IVideoDriver* sys ; //显示接口指针
CTexture* bg[2]; //图片指针
int done = 0;
int id = 0; //图片ID
float scale = 1.0; //放大缩小比率
float angel = 1.0; //旋转角度
void ButtonPressedProc(SDL_JoyButtonEvent * jbutton) //摇杆消息处理函数
{
switch(jbutton -> button)
{
case 8:
angel=180;
break;
case 6:
angel =0;
break;
case 7:
angel = 360;
break;
case 9:
break;
case 2:
scale+=0.05;
break;
case 1:
id++;
id=id%2;
break;
case 3:
angel+=1.0;
break;
case 11:
break;
case 0:
break;
}
}
void KeyPressedProc(SDL_keysym * keysym) //按键消息处理函数
{
switch(keysym -> sym)
{
case SDLK_UP:
angel=90;
break;
case SDLK_DOWN:
angel =180;
break;
case SDLK_LEFT:
angel =270;
break;
case SDLK_RIGHT:
angel =360;
break;
case SDLK_w:
scale-=0.05;
if(scale<=0)
scale = 0.05;
break;
case SDLK_d:
scale+=0.05;
break;
case SDLK_s:
angel-=1.0;
break;
case SDLK_a:
angel+=1.0;
break;
case SDLK_m:
id++;
id=id%2;
break;
}
}
void InputProc() //sdl消息处理函数
{
while( SDL_PollEvent( &event ) )
{
switch(event.type)
{
case SDL_QUIT:
done = 1;
break;
case SDL_KEYDOWN:
KeyPressedProc(&event.key.keysym);
break;
case SDL_JOYBUTTONDOWN:
ButtonPressedProc(&event.jbutton);
break;
}
}
}
int DrawScene() //画图函数
{
sys->BeginScene();
sys->RenderQuad(bg[id],0,0,480,272,0,0,scale,scale,angel,0xffffffff);
sys->EndScene();
return( TRUE );
}
extern "C"
int main(int argc, char* argv[]) //主函数
{
NGE_InitSDL(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK);
if(SDL_NumJoysticks()) {
joystick = SDL_JoystickOpen(0);
}
sys = NGE_GetVideoDriver();
bg[0] = LoadTexture("gamebg1.png");
bg[1] = LoadTexture("gamebg2.png");
sys->FpsInit();
while ( !done )
{
InputProc();
DrawScene();
sys->ShowFps();
}
FreeTexture(bg[0]);
FreeTexture(bg[1]);
NGE_QuitSDL();
return 0;
}
windows版的箭头对应psp的上下左右,w/d/s/a对应 △○×□,可以旋转缩放,可以看出由于是硬件加速所以旋转缩放不会有性能损耗.下面是windows版的程序运行截图。
[attach]82[/attach]