Проблемы при создании какого-то меню

Я сделал это как часть моей программы. Язык C ++, с библиотеками Allegro. Я хочу сделать это следующим образом: при нажатии появляется рамка вокруг одного из двух прямоугольников.

Это происходит, но только один раз, в начале. После этого граница исчезает все время, когда я убираю мышь. Кроме того, везде, где я нажимаю, граница появляется в нужном месте.

mouseX и mouseY работают отлично, даже цифры одинаковые. Но действие происходит только один раз на пути, который я хочу. Как расширить его на все случаи, когда я нажимаю?

    if(asd.type == ALLEGRO_EVENT_MOUSE_AXES)
{
mouseX = asd.mouse.x;
mouseY = asd.mouse.y;
}

if(asd.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)
{
if(asd.mouse.button & 1)
{
if (mouseX > 592 && mouseX < 608 && mouseY > 540 && mouseY < 556)
{
Chosen_Cell = 1;
borderX = 592;
borderY = 540;
}

if (mouseX > 592 && mouseX < 608 && mouseY > 556 && mouseY < 562)
{
Chosen_Cell = 2;
borderX = 592;
borderY = 556;
}

al_draw_rectangle(borderX, borderY, borderX + 16, borderY + 16, al_map_rgb(255, 255, 0),2);

if (16 < mouseX && mouseX < 528 && 16 < mouseY &&mouseY < 736)
{
switch (Chosen_Cell)
{
//blahblah, not important
}
}
}

}

1

Решение

Граница исчезает, потому что вы вызываете свой код рисования в событии нажатия кнопки. Это означает, что как только кнопка отпущена, прямоугольник больше не будет отображаться. Обычно лучше иметь значения обновлений событий, а затем рисовать все на экране, когда очередь событий пуста и таймер вызывает перерисовку.

//setup a timer and a redraw var
ALLEGRO_TIMER *timer;
bool redraw = false;

timer = al_create_timer(1.0/FPS);

al_register_event_source(event_queue, al_get_timer_event_source(timer));
al_start_timer(timer);

while(running)
{
if(asd.type == ALEGRO_EVENT_TIMER)
redraw = true;
if(asd.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)
{
if(asd.mouse.button & 1)
{
if (mouseX > 592 && mouseX < 608 && mouseY > 540 && mouseY < 556)
{
Chosen_Cell = 1;
borderX = 592;
borderY = 540;
}

if (mouseX > 592 && mouseX < 608 && mouseY > 556 && mouseY < 562)
{
Chosen_Cell = 2;
borderX = 592;
borderY = 556;
}
}
if(redraw && al_is_event_queue_empty(asd))
{
al_draw_rectangle(borderX, borderY, borderX + 16, borderY + 16, al_map_rgb(255, 255, 0),2);
redraw = false;
al_flip_display();
al_clear_to_color(al_map_rgb(0, 0, 0));
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector