Allegro 2D- Postać 'zjada' plansze podczas ruchu


(Ryan370z) #1

Bawię się w Allegro, robiąc niby-pacmana. Problem jest taki, że po wyświetleniu planszy na ekranie pacman 'zjada plansze'. najlepiej pokaże na przykładzie:

http://img808.imageshack.us/i/pacman1.png/ przed

http://img843.imageshack.us/i/beztytuutt.png/ po

A tutaj kod:

#include 

int main()

{

  allegro_init();

  install_keyboard();

  set_color_depth(16);

  set_gfx_mode(GFX_AUTODETECT_WINDOWED,640,480,0,0);

  clear_to_color(screen, makecol(128,128,128));

  //KOD!


  BITMAP *bufor = NULL; // Wskaźnik buforu

  BITMAP *pacman = NULL; // Wskaźnik pacmana 

  BITMAP *duch1 = NULL; // Wskaźnik Ducha nr 1

  BITMAP *plansza = NULL; // Wskaźnik planszy


  // Utworz bufor

  bufor = create_bitmap(640,480); 


  //Załaduj pacmana

  pacman = load_bmp("pacman.bmp",default_palette);


  //Załaduj ducha1

  duch1 = load_bmp("duch1.bmp",default_palette);


  // Załaduj planszę

  plansza = load_bmp("plansza.bmp",default_palette);


  // Utwórz wsółrzędne pacmana

  int pacman_x = 100, pacman_y = 100;


  // Utwórz współrzędne ducha1

  int duch1_x = 50, duch1_y = 50;


  // Pętla 

  while( !key[KEY_ESC])

  {

    if( key[KEY_LEFT]) pacman_x--;

    if( key[KEY_RIGHT]) pacman_x++;

    if( key[KEY_UP]) pacman_y--;

    if( key[KEY_DOWN]) pacman_y++; 

    if( pacman_x >= 610) pacman_x--;

    if( pacman_x <= 0) pacman_x++;

    if( pacman_y >= 450) pacman_y--;

    if( pacman_y <=0) pacman_y++;


    masked_blit( pacman, plansza, 0,0, pacman_x, pacman_y, pacman->w, pacman->h);


    // Przenieś planszę na bufor i bufor na okno

    blit( plansza, bufor, 0,0,0,0, 640,480);

    blit( bufor, screen, 0,0,0,0, 640,480);

  }


  // Usun bitmapy

  destroy_bitmap(pacman);

  destroy_bitmap(bufor);

  allegro_exit();

  return 0;

}

END_OF_MAIN();

(etam) #2

Zjada Ci planszę, bo ją sobie zamazujesz pacmanem. Zamiast

masked_blit( pacman, plansza, 0,0, pacman_x, pacman_y, pacman->w, pacman->h);


// Przenieś planszę na bufor i bufor na okno

blit( plansza, bufor, 0,0,0,0, 640,480);

blit( bufor, screen, 0,0,0,0, 640,480);

zrób

blit( plansza, bufor, 0,0,0,0, 640,480);

masked_blit( pacman, bufor, 0,0, pacman_x, pacman_y, pacman->w, pacman->h);

blit( bufor, screen, 0,0,0,0, 640,480);

(Ryan370z) #3

Wkleiłem tekst ale nei mogę sprawdzić czy działa bo pokazuje

Permission denied

Id returned 1 exit status

[Build error] ["Pacman] Error 1

Co zrobić? Jeszce nie miałem takiego błędu.


(etam) #4

A jak to kompilujesz?


(Ryan370z) #5

No normalnie, F9 przez Dev-c++


(etam) #6

Nie zakładaj że czytam Ci w myślach (i ktokolwiek inny na tym forum też) i że wiem że używasz Dev-C++. Dla mnie "normalnie" to jest z konsoli na linuxie "gcc program.c -o program -lalleg" i działa.

Wracając do:

1) Czy masz zainstalowany Allegro devpack (narzędzia -> sprawdź czy są nowe uaktualnienia/pakiety)?

2) Czy zrobiłeś Plik -> Nowy -> Projekt -> zakładka MultiMedia -> ikonka Allegro Application?


(Monczkin) #7

Ry4n370z , nazwij proszę temat konkretnie, bez zbędnych problemów w tytule. Inaczej wyciągnę konsekwencje. Przeczytaj proszę ten temat. viewtopic.php?f=16&t=394978