1. Reklam


    1. joysro
      ledas
      jungler
      keasro
      zeus
      karantina

C++ ile Allegro'da Sprite Oluşturma


  1. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    Önce masaüstünde bir klasör açın ve adını "Allegro Sprite Denemsi" olarak değiştirin.
    Sonra DEV C++ editörünü açın, "Yeni Proje" diyerek "Multimedia" bölümünden "Allegro"
    yu seçin, masaüstüne açtığınız klasörün içine kaydedin. Son olarak aşığdaki kodları ekleyerek programınızı "Run" komutu ile çalıştırın.

    sprite.h dosyası
    ------------------------------------------------------------------------------------
    #ifndef sprite_H_INCLUDED
    #define sprite_H_INCLUDED

    #include <allegro.h>

    enum Yon { _LEFT = 0, _RIGHT = 1, _DOWN = 2, _UP = 3 };

    class Sprite
    {
    public:
    BITMAP *_image;
    int _x;
    int _y;
    Sprite();
    ~Sprite();
    void Draw(BITMAP*);
    void Move(int,int);
    };

    #endif

    sprite.c dosyası
    ------------------------------------------------------------------------------------
    #include "sprite.h"

    Sprite::Sprite()
    {
    _image = NULL;
    _x = 0;
    _y = 0;
    }

    Sprite::~Sprite()
    {
    if(_image != NULL)
    {
    destroy_bitmap(_image);
    }
    }

    void Sprite::Draw(BITMAP *__buffer)
    {
    if(_image != NULL)
    {
    acquire_screen();
    clear_bitmap(__buffer);
    draw_sprite(__buffer, _image, _x, _y);
    release_screen();
    }
    }

    void Sprite::Move(int yon, int speed)
    {
    switch(yon)
    {
    case (int)_LEFT: _x-=speed; break;
    case (int)_RIGHT: _x+=speed; break;
    case (int)_UP: _y-=speed; break;
    case (int)_DOWN: _y+=speed; break;
    }
    }

    main.cpp dosyası
    ------------------------------------------------------------------------------------
    #include <allegro.h>
    #include "sprite.h"

    BITMAP *buffer;
    BITMAP *scr;

    void init();
    void deinit();

    int main() {
    init();

    Sprite *spr;
    spr->_image = scr;
    spr->_x = 100;
    spr->_y = 100;

    while (!key[KEY_ESC]) {
    /* put your code here */
    draw_sprite(screen, buffer, 0, 0);

    spr->Draw(buffer);

    if(key[KEY_LEFT]) spr->Move(0, 2);
    if(key[KEY_RIGHT]) spr->Move(1, 2);
    if(key[KEY_DOWN]) spr->Move(2, 2);
    if(key[KEY_UP]) spr->Move(3, 2);
    }

    deinit();
    return 0;
    }
    END_OF_MAIN()

    void init() {
    int depth, res;
    allegro_init();
    depth = desktop_color_depth();
    if (depth == 0) depth = 32;
    set_color_depth(depth);
    res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
    if (res != 0) {
    allegro_message(allegro_error);
    exit(-1);
    }

    install_timer();
    install_keyboard();
    install_mouse();
    /* add other initializations here */
    buffer = create_bitmap(640,480);
    scr = load_bitmap("picture.bmp", 0);
    }

    void deinit() {
    clear_keybuf();
    /* add other deinitializations here */
    }