采用nge显示中文非常方便,可以采用美观的freetype,可以勾画轮廓阴影,效果可以媲美商业的游戏.以下是本节的效果截图:
_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y纯粹剧情需要...
_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y代码说明:用的是第一课的代码,增加的部分见说明
_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y// bigproject.cpp : Defines the entry point for the console application.Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
//Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
#include "libnge.h"Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
#include "text_auto_line.h"
SDL_Joystick* joystick;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
SDL_Event event; Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
IVideoDriver* sys ;
CTexture* bg; //游戏背景图片Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
CTexture* msgbox; //对话框Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
CTexture* character;//人物资源Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
int done = 0; //程序是否结束Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
float scale = 1.0; //放大缩小比率1.0就是原大小,2.0就是2倍 0.5 就是缩小一倍Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
float angel = 0.0; //旋转角度Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
CTextAutoLine textout("simkai.ttf");//简单的文字处理类,注意要有ttf字库可以在windows的fonts下获得
//第一课的代码,没有动他的Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
void ButtonPressedProc(SDL_JoyButtonEvent * jbutton)Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
switch(jbutton -> button)Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 8: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel=90;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 6: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel =180;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 7: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel = 270;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 9: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel = 360;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 0:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
scale-=0.05;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
if(scale<=0)Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
scale = 0.05; Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 1: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
scale+=0.05;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 2:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel-=1.0;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 3:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel+=1.0;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case 11:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}
void KeyPressedProc(SDL_keysym * keysym)Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
switch(keysym -> sym)Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_UP: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel=90;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_DOWN: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel =180;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_LEFT: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel =270;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_RIGHT: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel =360;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break; Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_w:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
scale-=0.05;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
if(scale<=0)Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
scale = 0.05; Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_d:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
scale+=0.05;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_s:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel-=1.0;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_a:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
angel+=1.0;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDLK_m: Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}
_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y
void InputProc()Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
while( SDL_PollEvent( &event ) )Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
switch(event.type)Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDL_QUIT:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
done = 1;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDL_KEYDOWN:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
KeyPressedProc(&event.key.keysym);Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
case SDL_JOYBUTTONDOWN:Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
ButtonPressedProc(&event.jbutton);Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
break;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
int DrawScene()Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
sys->BeginScene();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
sys->RenderQuad(bg,0,0,0,0,0,0,scale,scale,angel,0xffffffff);
//显示人物,默认摄象机的的范围是(0,0)->(480,272)Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
//所以可以调整坐标位置使他位于合适的位置Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
sys->RenderQuad(character,0,0,0,0,120,-20,0.8,0.8,0,0xffffffff);
sys->RenderQuad(msgbox,0,0,0,0,0,160,1,1,0,0xafffffff);//画一个70%透明的对话框Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
for(int i=0;i<textout.m_texs.size();i++){Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
sys->RenderQuad(textout.m_texs[i],0,0, 0,0,40+1.5,180+i*25+1.5,1,1,0,0x9f000000);//字阴影Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
sys->RenderQuad(textout.m_texs[i],0,0, 0,0,40,180+i*25,1,1,0,0xffffffff);//字Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
sys->EndScene();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
return( TRUE );Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}
extern "C"Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
int main(int argc, char* argv[])Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
NGE_InitSDL(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK);Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
if(SDL_NumJoysticks()) {Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
joystick = SDL_JoystickOpen(0);Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
if ( TTF_Init() < 0 ) {Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
return 0;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}
sys = NGE_GetVideoDriver();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
bg = LoadTexture("gamebg.png");Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
msgbox = LoadTexture("msgbox.png");Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
character = LoadTexture("char.png");Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
textout.LoadString(" 教程第二课,简单的对话显示。动态显示人物的对话,是每个游戏的基本元素。最后我要说的是:请爱护萝莉。");//加载要说的话,也可以从文件里读取.Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
textout.CreateTextLine(19,21,TTF_STYLE_NORMAL);Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
sys->FpsInit();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
while ( !done )Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
{Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
InputProc();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
DrawScene();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
sys->ShowFps();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
FreeTexture(bg);Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
FreeTexture(msgbox);Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
FreeTexture(character);Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
TTF_Quit();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
NGE_QuitSDL();Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
return 0;Ky]lpR#hvVw5P0[e{}8n5ud/3wey:本文来自:V电G玩S天K空Y
}
本节代码下载:lesson2,不包含字体文件,请将字体文件加入
_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y注意main函数上边掉了下面语句
_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y#pragma comment (lib,"SDL_ttf.lib")
_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y不加会出现text_auto_line.obj : error LNK2001: unresolved external symbol _TTF_CloseFont...
_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y如果vc下编译时还有linkerror请看[教程00],解决办法写在那个里面了.
- 本文分页:
-
附件下载:5'%j'Z}9`4N.dPz^|[W3;7=b?clH9s_KG4m?3R&g,4)==5O>Z~Cj>t本文来自:V电G玩S天K空Y
lesson2.rar下载地址[1] - 本文关键字:PSP开发教程,02,中文显示,freetype,采用,nge,显示中文
- 上一篇: ♦ PSP开发教程03 移动的精灵 2007/10/6
- 下一篇: ♦ PSP开发教程00 libnge介绍 2007/10/6
-
相关文章:
- [PSP软件开发] 项目计划:采用硬解码播放mp3声音的libcoolaudio
- [PSP软件开发] PSP开发教程06采用硬解码播放mp3声音的libcoolaudio
- [PSP软件开发] PSP开发教程05 使用SQL数据库开发
- [PSP软件开发] PSP开发教程03 移动的精灵
- [PSP软件开发] PSP开发教程02 中文显示freetype 采用nge显示中文
- [PSP软件开发] PSP开发教程00 libnge介绍
- [PSP软件开发] PSP开发教程01 [NGE使用教程01]helloworld,第一个sdl+nge程序
- [PSP软件开发] FreeType字体程序库介绍
- [PSP软件开发] PSP 编程 教程01-02
- [PSP玩游戏] PSP 3.02OE-b使用指南


