Allegro学习笔记六

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* )一样 

你可能感兴趣的:(游戏,编程,timer,buffer,音乐,keyboard)