在游戏中更改游戏控件 我在C++和AlelGro 5中编程游戏,我想做控制设置。所以,若玩家愿意,他可以改变设置菜单中的控制(在游戏中)
我有以下代码:在游戏中更改游戏控件 我在C++和AlelGro 5中编程游戏,我想做控制设置。所以,若玩家愿意,他可以改变设置菜单中的控制(在游戏中),c++,controls,2d-games,allegro,C++,Controls,2d Games,Allegro,我有以下代码: while(!exit) { ALLEGRO_EVENT ev; al_wait_for_event(e_queue, &ev); if (ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_DOWN:
while(!exit)
{
ALLEGRO_EVENT ev;
al_wait_for_event(e_queue, &ev);
if (ev.type == ALLEGRO_EVENT_KEY_DOWN)
{
switch(ev.keyboard.keycode)
{
case ALLEGRO_KEY_DOWN:
//player goes down...
break;
case ALLEGRO_KEY_UP:
//player goes up...
break;
case ALLEGRO_KEY_LEFT:
//player goes left...
break;
case ALLEGRO_KEY_RIGHT:
//player goes right...
break;
case ALLEGRO_KEY_SPACE:
break;
default:
break;
}
}
...
}
我想,我可以将ALLEGRO KEY CODE的变量(我不知道是否存在这样的类型)类型,该类型具有KEY CODE(例如ALLEGRO_KEY_LEFT),然后将该代码替换为:
...
allegro key code keyUP;
allegro key code keyDOWN;
...
while(!exit)
{
ALLEGRO_EVENT ev;
al_wait_for_event(e_queue, &ev);
if (ev.type == ALLEGRO_EVENT_KEY_DOWN)
{
switch(ev.keyboard.keycode)
{
case keyDOWN:
break;
case keyUP:
break;
case keyLEFT:
break;
case keyRIGHT:
break;
case keySPACE:
break;
default:
break;
}
}
}
以及类似以下内容的加载项设置:
//set 'UP' key
switch(ev.keyboard.keycode)
{
case ALLEGRO_KEY_A:
keyUP = ALLEGRO_KEY_A;
break;
case ALLEGRO_KEY_B:
keyUP = ALLEGRO_KEY_B;
break;
case ALLEGRO_KEY_UP:
keyUP = ALLEGRO_KEY_UP;
break;
...
}
}
关键是,我不知道什么类型的商店,比如快板上下
谢谢 我将有两个映射,一个映射函数名到函数,另一个映射键到函数名或函数。当用户想要重新映射键时,请更改第二个映射 可能是这样的
std::unordered_map<std::string, std::function<void()>> function_map;
function_map["up"] = std::bind(&functionForUp);
function_map["down"] = std::bind(&functionForDown);
function_map["jump"] = std::bind(&functionForJump);
// etc.
std::unordered_map<int, std::string> key_map;
key_map[ALLEGRO_KEY_UP] = "up";
key_map[ALLEGRO_KEY_DOWN] = "down";
key_map[ALLEGRO_KEY_SPACE] = "jump";
// etc.
这允许您随意更改键映射
:
key_map[ALLEGRO_KEY_J] = "jump";
参考资料:
int key = ALLEGRO_KEY_DOWN;
这应该行得通
int key = ALLEGRO_KEY_DOWN;