我正在做我在Allegro 5中的第一个游戏,我已经有了标题菜单渲染,但是我想在菜单中添加可点击的文本。我如何才能使它在您将鼠标悬停在文本上时可以单击它?我认为使用for语句检查像素会对性能造成很大的影响,以下是我到目前为止所得到的:
#include <allegro5\allegro.h>
#include <allegro5\allegro_image.h>
#include <allegro5\allegro_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上使用代码块。
发布于 2012-09-03 14:28:06
要“正确地”完成这项工作,您需要使用某种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>发布于 2015-02-16 16:27:52
以上不是真的;你可以将键盘添加到游戏中,然后你有两个碰撞检测选项,像素完美和边界框,这两个选项都在allegro 5维基中涵盖。创建最佳菜单的关键是为菜单创建一个循环和计时器,然后分别列出键盘、鼠标和计时器事件。接下来,创建一些if语句,以便鼠标或键盘事件只在您实际单击它时触发,这是必需的,这样您可以同时使用鼠标和键盘在菜单中滚动,或者您可以将其设置为在您单击之后鼠标不会影响屏幕,但前者看起来更好,至少是IMO。
https://stackoverflow.com/questions/12239408
复制相似问题