2012-09-02 28 views
2

我正在开发Allegro 5中的第一款游戏,我有这样的标题菜单渲染,但是我想在菜单中添加可点击的文本。我怎样才能做到这一点,当你将鼠标悬停在文本上时,你可以点击它?我想有一个for语句检查像素将是表现非常糟糕,这是我到目前为止有:如何有效创建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

+0

从“画静态图像到屏幕”到“使GUI工作”是一个*长*步骤。你首先需要一个有效的渲染循环。 –

+0

我还没有在任何地方找到这个信息,什么是没有GUI的游戏?如果你能解释一下在allegro工作GUI的一种可能的非常基本的方法,我会非常感激,因为我根本没有找到任何有关如何在任何地方做到这一点的信息。 :( – Bugster

回答

6

做“正确,“你需要使用某种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> 
+0

真棒,非常感谢这个例子! – Bugster

+0

也谢谢指定斜杠,我认为它是一样的东西。 – Bugster

0

以上是不正确的; 您可以将键盘添加到您的游戏中,然后您可以在allegro 5 wiki中找到碰撞检测,像素完美和边界框两种选项。这里创建最佳菜单的打勾是为菜单创建一个循环和计时器,然后列出键盘,鼠标和计时器事件。接下来做一些if语句,这样鼠标或键盘事件只会在实际点击时触发,这是必要的,所以您可以使用鼠标和键盘滚动浏览菜单,也可以直接在鼠标或键盘事件之后触发你点击,但前者看起来更好,至少IMO。

+0

如果你想写一些关于其他答案或附加的东西,请写评论 – Rizier123