在游戏中改变游戏控制
Change game controls in game
我正在用c++和Allegro 5编程游戏,我想做控制设置。所以如果玩家愿意,他可以在设置菜单(在游戏中)改变控制。
我有这样的代码:
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变量(我不知道是否存在这样的类型)类型,其中有键代码(例如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;
...
}
}
关键是,我不知道什么类型存储像ALLEGRO_KEY_UP, DOWN…
谢谢!
我将有两个映射,一个将函数名映射到函数,另一个将键映射到函数名或函数。当用户想要重新映射键时,更改第二个映射。
可以是
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.
为特定键调用函数,例如:
function_map[key_map[ev.keyboard.keycode]]();
这允许您随意更改key_map
:
key_map[ALLEGRO_KEY_J] = "jump";
引用:
-
std::unordered_map
-
std::function
-
std::bind
所有这些关键代码都应该定义为数字。所以可以尝试使用整数
int key = ALLEGRO_KEY_DOWN;
相关文章:
- 控制允许动态运行c++的并发操作数
- 从控制台中删除最后打印的元素
- 是否可以使用if constexpr删除控制流语句
- 在C++游戏中与库存系统作斗争
- 无法在windows控制台中为C++程序提供必要的输入
- 换位表导致测试失败(但在游戏中运行良好)
- Craps游戏问题,忽略if语句
- 矢量下标超出SFML游戏中的范围
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 控制到达非空函数clang(-Wreturn-type)的末尾
- 查找 GCD:并非所有控制路径都返回值
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 如何在CUI游戏中输入C 控制台中的密钥输入
- C 在Win32控制台中制作游戏
- SDL 中的倾斜控制,适用于 Android NDK JNI 游戏
- Big 2游戏控制(控制游戏流程)
- 游戏循环帧速率控制问题
- 发行控制游戏帧率的c++
- 通用游戏控制/用户界面库或源代码
- 在游戏中改变游戏控制