【发布时间】:2013-11-22 08:44:08
【问题描述】:
我正在开发一个在 allegro 5 中的游戏,我想在屏幕上动态创建矩形对象并让它们可以用鼠标按钮点击
al_register_event_source( event_queue, al_get_timer_event_source(timer));
al_register_event_source( event_queue, al_get_mouse_event_source());
al_clear_to_color(al_map_rgb(0, 0, 0));
al_flip_display();
al_start_timer(timer);
while ( !exit )
{
ALLEGRO_EVENT ev;
al_wait_for_event( event_queue, &ev);
if (ev.type == ALLEGRO_EVENT_TIMER)
;
else if ( ev.type == ALLEGRO_EVENT_MOUSE_AXES )
{
x = ev.mouse.x;
y = ev.mouse.y;
}
else if ( ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN )
{
if ( x >= rect.x && x <= rect.maxx && y >= rect.y && y <= rect.maxy )
destory ( rect );
}
else if ( ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE )
break;
if ( redraw && al_event_queue_is_empty(event_queue)){
redraw = false;
al_draw_rectangle ( rect.x, rect.y, rect.maxx, rect.maxy, blue, 1 );
al_flip_display();
al_clear_to_color(al_map_rgb(0, 0, 0));
}
}
但这仅针对一个矩形进行了硬编码。我怎样才能为此制作一个可以处理按钮等矩形的事件。
【问题讨论】:
-
rect是如何定义的?为什么需要新的事件类型?你不能只拥有一个在单击鼠标时循环遍历的矩形数组吗? -
rect 的坐标只有 top x,top y, bottom x, bottom y。我希望屏幕上随机出现矩形,并且不想通过使用矩形数组来固定矩形的数量。但我会先试试你的想法,看起来不错。但是如何确定单击了哪个矩形?我必须使用一个大循环,但我想要一个有效的方法。
-
1.) 使用可以使用动态内存管理,当数组太小时增加数组大小。 (搜索
realloc)。另一种选择是链表。 2.) 找到矩形的最简单方法是单个大循环。如果您需要更高级的东西,您可能需要搜索空间分区。 -
感谢您的好建议。你能给我介绍一下空间分区吗?
-
抱歉,没有。我不是这方面的专家。先用简单的方法。如果太慢,那就寻找分区,因为事情会变得更加复杂和困难。