由小白到大大的涅盘,从vgsky.com开始!

PSP开发教程02 中文显示freetype 采用nge显示中文

Update:2007/10/6,Click:0 本文如有下载 请从下面附件中下载

举手之劳 是您对我们最大的支持 感谢您!

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y

采用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"

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y

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 ;

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y

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下获得

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y

//第一课的代码,没有动他的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
}                   

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自: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

 

_+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
}

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自: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);

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y

 //显示人物,默认摄象机的的范围是(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);

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自:V电G玩S天K空Y

             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
}

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自: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
}

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自: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
}

_+wARQZ>O0cEbTd_nwIxKS|8fE3R2(b(FG\q74(@{d~?^D3本文来自: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],解决办法写在那个里面了.

【分类导航】

【热门游戏资讯】

更多

【推荐游戏资讯】

更多

【最新资讯更新】

更多

【赞助商链接】