如何有效地创建allegro 5标题菜单
How can you efficiently create an allegro 5 title menu?
我正在Allegro 5中制作我的第一个游戏,我已经得到了标题菜单的渲染,但我想在菜单中添加可点击的文本。我该如何做到,当你把鼠标悬停在文本上时,你可以点击它?我想让一个for语句检查像素会对性能非常不利,以下是我目前所拥有的:
#include <allegro5allegro.h>
#include <allegro5allegro_image.h>
#include <allegro5allegro_primitives.h>
const int width = 1280;
const int height = 720;
int main(void)
{
al_init();
al_init_primitives_addon();
al_init_image_addon();
ALLEGRO_DISPLAY *display = al_create_display(width, height);
ALLEGRO_BITMAP *title = al_load_bitmap("titlemenu.bmp");
al_clear_to_color(al_map_rgb(0, 0, 0));
al_draw_bitmap(title, 0, 0, 0);
al_flip_display();
al_rest(3.0);
al_destroy_display(display);
return 0;
}
我在windows XP SP3 上使用代码块
要"正确地"执行此操作,您需要使用某种GUI库。但是,通过硬编码一些矩形的坐标,您可以轻松地创建屏幕的可点击部分。
首先,您需要设置您的事件处理:
ALLEGRO_EVENT_QUEUE *queue;
queue = al_create_event_queue();
al_install_keyboard();
al_register_event_source(queue, al_get_keyboard_event_source());
在不涉及事件处理细节的情况下(这是一个完整的主题),以下是相关的部分:
int selection = 0;
while (!selection)
{
ALLEGRO_EVENT event;
al_wait_for_event(queue, &event);
if (event.type == ALLEGRO_EVENT_KEY_UP)
{
if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
selection = MYGAME_QUIT;
}
else if (event.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP)
{
if (event.mouse.x >= MYGAME_MENU_X1 && event.mouse.x < MYGAME_MENU_X2 &&
event.mouse.y >= MYGAME_MENU_Y1 && event.mouse.y < MYGAME_MENU_Y2)
{
selection = MYGAME_OPTION1;
}
}
}
有许多方法可以改进此示例。。。这只是为了让你开始。
您应该仔细阅读有关事件处理的文档,检查捆绑的示例,并查看wiki以获取更多信息。
PS:使用文件路径时使用正向斜杠,因为它们是跨平台的:
#include <allegro5/allegro.h>
以上情况不正确;你可以将键盘添加到游戏中,然后你就有了两个碰撞检测选项,完美像素和边界框,这两个选项都在allegro 5 wiki中介绍过。创建最佳菜单IMO的方法是为菜单创建一个循环和计时器,然后分别列出键盘、鼠标和计时器事件。接下来做一些if语句,这样鼠标或键盘事件只有在你真正点击它时才会触发,这是必要的,这样你就可以用鼠标和键盘滚动菜单,或者你可以这样做,这样鼠标在你点击后才影响屏幕,但前一个看起来更好,至少IMO.
相关文章:
- 无法获取菜单选择以运行函数.C++
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 对于C++,方括号中的标题必须总是在引号中的标题之上吗
- 库标题在标题中不可见,但在 cmake build 下.cpp文件中完全可见.为什么?
- 为什么我不应该把所有东西都放在标题中?
- WinAPI 检查窗口是否具有常规标题栏
- C++ 中的图形菜单
- C++ 程序菜单使用做同时和切换
- 如何更改窗体上所有控件的标题?[C++生成器]
- 提升用于解析标题列的精神语法
- 我正在尝试创建一个菜单,但我的代码一直在循环
- 所以我正在为我的学校作业练习继承,但我无法正确实施标题保护
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 使用类 ?C++ 和 SFML 以及标题中的 15 个字符
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 如何有效地创建allegro 5标题菜单
- 在Win32程序中C++,如何修改菜单的标题?
- 禁用主窗口的标题上下文菜单
- Qt覆盖标题栏和菜单栏
- 如何动态更新QMenu和子菜单标题文本