Как эффективно создать меню заголовков allegro 5?
Я работаю над своей первой игрой в Allegro 5, у меня рендеринг меню заголовка как таковой, однако я хочу добавить кликабельный текст в меню. Как бы я сделал так, чтобы, когда вы наводите курсор на текст, вы могли щелкнуть по нему? Я думаю, что для проверки утверждений пикселей было бы очень плохо для производительности, вот что у меня есть до сих пор:
#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
2 ответа
Чтобы сделать это "правильно", вам нужно использовать какую-то библиотеку графического интерфейса. Но вы можете легко создать кликабельную часть экрана, жестко закодировав координаты некоторых прямоугольников.
Сначала вам нужно настроить обработку событий:
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;
}
}
}
Есть много способов улучшить этот пример... Это только начало.
Вам следует внимательно прочитать документацию, касающуюся обработки событий, изучить прилагаемые примеры и проверить вики для получения дополнительной информации.
PS: используйте прямые косые черты при использовании путей к файлам, так как они кроссплатформенные:
#include <allegro5/allegro.h>
Выше не верно; Вы можете добавить клавиатуру в свою игру, а затем у вас есть 2 варианта для обнаружения столкновений, идеальный пиксель и ограничивающий прямоугольник, оба из которых описаны в вики allegro 5. Отметьте здесь, чтобы создать лучшее меню IMO, чтобы создать цикл и таймер для меню, а затем перечислить отдельные события клавиатуры, мыши и таймера. Затем сделайте несколько операторов if, чтобы событие мыши или клавиатуры срабатывало только тогда, когда вы действительно щелкаете по нему, это необходимо, чтобы вы могли прокручивать меню с помощью мыши и клавиатуры или просто сделать так, чтобы мышь не влияла на экран до тех пор, пока Вы нажимаете, но бывший выглядит лучше, по крайней мере, IMO.