Allegroプログラム Level 1

今回は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)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>