Как эффективно создать меню заголовков 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.

Другие вопросы по тегам