【教程06】按键控制



yl_ls
2009-03-19 20:50:47

[url=http://www.iacger.com]http://www.iacger.com[/url] 首发[code=c]#include "libnge2.h"

// 退出标识
int game_quit = 0;

// 定义单次移动的像素大小
#define MOVEPOS 20

// 用于保存当前坐标, 一开始在中间显示
pointf pt = {230,126};

// 按下键处理
void btn_down(int keycode)
{
switch(keycode)
{
case PSP_BUTTON_UP:
if(pt.y > MOVEPOS)
{
pt.y-=MOVEPOS;
}
break;
case PSP_BUTTON_DOWN:
if(pt.y + 20 + MOVEPOS < 272)
{
pt.y+=MOVEPOS;
}
break;
case PSP_BUTTON_LEFT:
if(pt.x > MOVEPOS)
{
pt.x-=MOVEPOS;
}
break;
case PSP_BUTTON_RIGHT:
if(pt.x + 20 + MOVEPOS < 480)
{
pt.x+=MOVEPOS;
}
break;
case PSP_BUTTON_TRIANGLE:
break;
case PSP_BUTTON_CIRCLE:
break;
case PSP_BUTTON_CROSS:
break;
case PSP_BUTTON_SQUARE:
break;
case PSP_BUTTON_SELECT:
game_quit = 1;
break;
case PSP_BUTTON_START:
game_quit = 1;
break;
}
}

// 释放键处理
void btn_up(int keycode)
{
switch(keycode)
{
case PSP_BUTTON_UP:
break;
case PSP_BUTTON_DOWN:
break;
case PSP_BUTTON_LEFT:
break;
case PSP_BUTTON_RIGHT:
break;
case PSP_BUTTON_TRIANGLE:
break;
case PSP_BUTTON_CIRCLE:
break;
case PSP_BUTTON_CROSS:
break;
case PSP_BUTTON_SQUARE:
break;
case PSP_BUTTON_SELECT:
game_quit = 1;
break;
case PSP_BUTTON_START:
game_quit = 1;
break;
}
}

// 用户绘图函数
void DrawScene()
{
// 为开始绘图准备
BeginScene(1);

// 绘制移动的矩形
FillRect(pt.x,pt.y,20,20,MAKE_RGBA_4444(255,255,255,255), DISPLAY_PIXEL_FORMAT_4444);

// 完成绘图并显示
EndScene();
}

extern "C"
int main(int argc, char* argv[])
{

// nge 初始化
NGE_Init(INIT_VIDEO);

// 设置自定义按钮处理函数
InitInput(btn_down,btn_up,1);
while ( !game_quit )
{
// 显示帧数显示
ShowFps();
// 要求 nge2 处理按键,它将使用 InitInput 定义的函数来处理
InputProc();
// 调用用户绘图函数
DrawScene();
}
// nge 退出处理
NGE_Quit();
return 0;
}[/code]windows 上的方向键对应键为
上:W 下:S 左:A 右:D

效果图:
[img]http://www.iacger.com/bbs/attachment.php?id=5378&u=1639&extension=gif&attach=1237441916_0.gif&attachpath=1/6/3/9[/img]