Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在游戏中更改游戏控件 我在C++和AlelGro 5中编程游戏,我想做控制设置。所以,若玩家愿意,他可以改变设置菜单中的控制(在游戏中)_C++_Controls_2d Games_Allegro - Fatal编程技术网

在游戏中更改游戏控件 我在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;