今回はLevel 1 まで進めます。
以下のURLを参考
龍神録プログラミングの館
http://dixq.net/rp/
プログラミング/初心者向け/チュートリアル/段階的学習/STGを作れ
http://wiki.game-develop.com/index.php?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%2F%BD%E9%BF%B4%BC%D4%B8%FE%A4%B1%2F%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB%2F%C3%CA%B3%AC%C5%AA%B3%D8%BD%AC%2FSTG%A4%F2%BA%EE%A4%EC
Level 1 自機を表示する
自機を表示させましょう。
今回は画像を表示させる関係で、リンクするライブラリが増えますので
CmakeLists.txtの編集も行います。
画像は「0.png」を利用します。
キャラのサイズは73×73なので、al_draw_bitmap_region で描画します。
al_draw_bitmap_region(bitmap, 0, 0, 73, 73, 0, 0, 0);
あと、ついでに ALLEGRO_TIMER を利用してFPSを固定にしました。
#define FPS 60 ALLEGRO_TIMER *timer = NULL; // タイマーの初期化 timer = al_create_timer(1.0 / FPS); if(!timer) { fprintf(stderr, "failed to create event_queue!\n"); al_destroy_display(display); return -1; }
最終的には以下の通りです。
main.c
#include <stdio.h> #include <allegro5/allegro.h> #include <allegro5/allegro_image.h> #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 #define FPS 60 int main(int argc, char **argv) { ALLEGRO_DISPLAY *display = NULL; ALLEGRO_BITMAP *bitmap = NULL; ALLEGRO_TIMER *timer = NULL; ALLEGRO_EVENT_QUEUE *event_queue = NULL; bool exitFlg = false; bool redraw = true; const char *filename; filename = "data/img/0.png"; // 初期化 if(!al_init()) { fprintf(stderr, "failed to initialize allegro!\n"); return -1; } // 画面の作成 display = al_create_display(SCREEN_WIDTH, SCREEN_HEIGHT); if(!display) { fprintf(stderr, "failed to create display!\n"); return -1; } // キーボード入力の初期化 if(!al_install_keyboard()) { fprintf(stderr, "failed to initialize keyboard!\n"); al_destroy_display(display); return -1; } // 画像読み込み用の追加addonの初期化 if(!al_init_image_addon()) { fprintf(stderr, "failed to initialize image!\n"); al_destroy_display(display); return -1; } // タイマーの初期化 timer = al_create_timer(1.0 / FPS); if(!timer) { fprintf(stderr, "failed to create event_queue!\n"); al_destroy_display(display); return -1; } // イベントキューの作成 event_queue = al_create_event_queue(); if(!event_queue) { fprintf(stderr, "failed to create event_queue!\n"); al_destroy_display(display); return -1; } // イベントに参加させる al_register_event_source(event_queue, al_get_display_event_source(display)); al_register_event_source(event_queue, al_get_keyboard_event_source()); al_register_event_source(event_queue, al_get_timer_event_source(timer)); al_start_timer(timer); // ALLEGRO_VIDEO_BITMAPのほうが早いので //al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP); al_set_new_bitmap_flags(ALLEGRO_VIDEO_BITMAP); bitmap = al_load_bitmap(filename); // 画面のクリア al_clear_to_color(al_map_rgb(0, 0, 0)); // 裏画面の切り替え al_flip_display(); ALLEGRO_EVENT ev; while(!exitFlg) { al_wait_for_event(event_queue, &ev); if(ev.type == ALLEGRO_EVENT_KEY_UP) { // 何かキーが押して放されたらここにくる switch(ev.keyboard.keycode) { case ALLEGRO_KEY_ESCAPE: exitFlg = true; break; default: break; } } if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { // 画面が閉じるときにここに来る } if(ev.type == ALLEGRO_EVENT_TIMER) { // 描画のタイミングが来たよ redraw = true; } if(redraw && al_is_event_queue_empty(event_queue)) { // 再描画処理 redraw = false; // 画面のクリア al_clear_to_color(al_map_rgb(0, 0, 0)); // キャラ画像の描画 al_draw_bitmap_region(bitmap, 0, 0, 73, 73, 0, 0, 0); // 裏画面の切り替え al_flip_display(); } } // 画像の解放 al_destroy_bitmap(bitmap); // 画面の解放 al_destroy_display(display); // キーボード入力の解放 al_uninstall_keyboard(); // イベントキューの削除 al_destroy_event_queue(event_queue); return 0; }
CMakeLists.txt
# cmakeのバージョン cmake_minimum_required(VERSION 2.8) # プロジェクトの名前 project(debeso) # コンパイルするソース set(debeso_SOURCES src/main.cpp ) # インクルードディレクトリ include_directories(${CMAKE_BINARY_DIR}) # 実行ファイルの生成 add_executable(bin/debeso ${debeso_SOURCES}) # ライブラリのリンク target_link_libraries(bin/debeso -lallegro -lallegro_image)