http://wiki.allegro.cc/AllegroExamples以上是英文例子站点。
by Shawn Hargreaves,allegro的作者
目录: 1 Allegro 例子
1.1 exhello
1.2 exmem
1.3 expat
1.4 expal
1.5 exflame
1.6 exbuf
#include <allegro.h>
int main(void)
{
BITMAP *buffer;
int c;
if (allegro_init() != 0)
return 1;
install_timer();
install_keyboard();
if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0) {
if (set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0) {
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
return 1;
}
}
set_palette(desktop_palette);
/* allocate the memory buffer */
buffer = create_bitmap(SCREEN_W, SCREEN_H);
/* First without any buffering...
* Note use of the global retrace_counter to control the speed. We also
* compensate screen size (GFX_SAFE) with a virtual 320 screen width.
*/
clear_keybuf();
c = retrace_count+32;
while (retrace_count-c <= 320+32) {
acquire_screen();
clear_to_color(screen, makecol(255, 255, 255));
circlefill(screen, (retrace_count-c)*SCREEN_W/320, SCREEN_H/2, 32, makecol(0, 0, 0));
textprintf_ex(screen, font, 0, 0, makecol(0, 0, 0), -1, "No buffering (%s)",
gfx_driver->name);
release_screen();
if (keypressed())
break;
}
/* and now with a double buffer... */
clear_keybuf();
c = retrace_count+32;
while (retrace_count-c <= 320+32) {
clear_to_color(buffer, makecol(255, 255, 255));
circlefill(buffer, (retrace_count-c)*SCREEN_W/320, SCREEN_H/2, 32, makecol(0, 0, 0));
textprintf_ex(buffer, font, 0, 0, makecol(0, 0, 0), -1, "Double buffered (%s)",
gfx_driver->name);
blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
if (keypressed())
break;
}
destroy_bitmap(buffer);
return 0;
}
END_OF_MAIN()
------------------------------------------------------------------------
小结六:
1、install_timer();
加载 Allegro 时钟中断处理程序. 你必须在加载任何用户时钟例程之前,和在显示 鼠标,播放 FLI 动画或者 MIDI 音乐,使用其它的 GUI 例程之前执行它.
基本的 PC 时钟只能是每秒触发 18.2 次, 这对于快节奏的动作游戏不是很适用. Allegro 可以用重新配置过的一个时钟例程来代替系统原来的,这个重编程过的时钟有更高的触发频率,但是仍然以以前的速度调用 BIOS 处理程序. 你可以设置几个你自己的虚拟时钟, 每个可以以不同的速度运行, Allegro 将不断的重编程时钟使它们在正确的时间被调用.因为 Allegro 改变了 PIT 时钟芯片的设置,它不能和 djgpp 的 libc 里的 uclock() 函数一起使用.
也就是说,allegro自己帮你建立了一个计时机制,你只需要去调用它
事实上我试过了,如果去掉install_timer();程序照样可以运行,这可能是因为PC时钟存在的原因。
2、buffer = create_bitmap(SCREEN_W, SCREEN_H);
创建一个与screen大小相同的内存位图作为缓冲区,用于离屏绘制。
3、clear_keybuf();
清除键盘缓冲区中的记录(如果存在的话),这是为了消除潜在的干扰clear_bitmap(BITMAP* )一样