Autor Wątek: Rozmazywanie sie ALLEGRO  (Przeczytany 3258 razy)

Offline CoolerKox

  • Użytkownik

# Październik 22, 2011, 00:06:10
Ok moja gierka prawie w wersji 0.1 :DD
Jest mapa robiona za pomocą dwu wymiarowej tablicy. I użyłem masked_blit i extern short int map[30][30] =
{
12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,11,11,10,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,11,11,10,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,12,11,10,11,12,12,12,12,12,12,12,12,12,12,12,12,2 ,2 ,2,
12,12,12,12,2 ,2 ,12,12,12,12,12,12,12,10,12,12,12,12,12,12,12,12,12,12,12,2 ,2 ,2 ,2 ,2 ,
    12,12,12,2 ,2 ,2 ,2 ,2 ,12,12,12,12,12,10,12,12,12,12,12,12,12,12,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,
2 ,2 ,2 ,2 ,2 ,2 ,2 ,6 ,6 ,6 ,6 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,
3, 3 ,3 ,3 ,3 ,3 ,3 ,6 ,6 ,6 ,6 ,6 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,
3 ,3 ,3 ,3 ,3 ,3 ,3 ,6 ,6 ,6 ,3 ,6 ,6 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,6 ,6 ,6 ,3 ,
3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,6 ,6 ,6 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,6 ,3 ,3 ,3 ,3 ,
1 ,9 ,9 ,9 ,9 ,9 ,1 ,1 ,1 ,1 ,1 ,3 ,3 ,3 ,1 ,8 ,8 ,8 ,8 ,8 ,1 ,1 ,1 ,3 ,3 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,9 ,9 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,3 ,3 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,9 ,1 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1, 8 ,8 ,8 ,8 ,1 ,1 ,1 ,1 ,1 ,1 ,9 ,9 ,9 ,9 ,9 ,1 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,9 ,9 ,9 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,
5 ,5 ,5 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,5 ,5 ,5 ,1 ,1 ,1 ,1 ,1 ,8 , 8, 8,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,1 ,1 ,1 ,1 ,1 ,7 , 7, 7,1 ,1 ,0 ,0 ,1 ,1 ,1 ,1 ,
4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,

};
tak ona wygląda :D 12 to w moim texture packu jest fioletowy kolor ? nie wiem ten co ma 255 czerwonego i niebieskiego i 0 zielonego. gdy przesunę mapę w prawo to strasznie się to rozmywa, i sa np 2 drzewa Mimo że używam buforowania ! Jak temu zaradzić? Może inaczej mapę napisać? Nawet gdy dam tło to i tak rozmywa się na nim mapa i nie widać go jak przejadę w prawo i w lewo bo zasłania go to co wtedy widziałem. Rozumiecie wgl mnie?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline MaxGarden

  • Użytkownik
    • Profil na warsztacie

# Październik 22, 2011, 00:08:39
A czy na początku każdej klatki czyścisz "screen" ?

Offline CoolerKox

  • Użytkownik

# Październik 22, 2011, 01:42:36
oj nie ;/ dobra zrobię to a słuchajcie jak zrobić ,żeby ludek był na wierzchu nad tłem i pustymi blokami w moim texture packu? Ale pod resztą rzeczy? Nie wiem czy jasno Xd bo google przeszukałem i znalazłem kilka fajnych kursów ale o tym nie było ..
   while( !key[KEY_ESC])
{
while( speed > 0)
{
// SCROLLOWANIE MAPY

   
if((key[KEY_RIGHT]) && (mapa_x < 14)){ mapa_x = mapa_x + 1;ludek_x++; } else
           if((key[KEY_LEFT]) && (mapa_x > 0)){ mapa_x = mapa_x - 1;ludek_x--;  } else
           if((key[KEY_DOWN]) && (mapa_y < 8)){ mapa_y = mapa_y + 1;ludek_y++; }  else
           if((key[KEY_UP]) && (mapa_y > 0)){ mapa_y = mapa_y - 1; ludek_y--;  }   

clear_to_color( bufor, makecol( 150, 150, 150 ) );
blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
speed--;
}
Tak teraz zrobiłem ale strasznie miga ;/
« Ostatnia zmiana: Październik 22, 2011, 01:49:17 wysłana przez CoolerKox »

Offline Rydwan

  • Użytkownik

# Październik 22, 2011, 02:01:15
Jesli chodz pytanie z widocznoscia postaci, to masz na mysli poziomy czy to ze jak przejdziesz kolo drzewka to one Cie troche zaslania?

Miga, bo pewnie wszystko po kolei dajesz na screen.
Najpierw narysuj cala bitmape i potem ja wrzuc na screen.
« Ostatnia zmiana: Październik 23, 2011, 02:39:25 wysłana przez bs.mechanik »

Offline MaxGarden

  • Użytkownik
    • Profil na warsztacie


Offline CoolerKox

  • Użytkownik

# Październik 22, 2011, 12:17:49
@rydwan w ogóle go nie widzę ludka ;/ i czy da się zrobić kolizję tylko z tymi obiektami które chcę wszystkie oprócz 12 i drzewa? 12 = fioletowe tło

Offline Rydwan

  • Użytkownik

# Październik 22, 2011, 12:43:53
Musisz sie zapoznac z terminem 'kolizja w grze', bo widze, ze nie wiesz co znaczy.
Jesli nie bedziesz mial kolizji z drzewem, to na nie bedzie wchodzil jak na trawe.

Albo nie rysujesz swojego bohatera, albo rysujesz go na poczatku i potem zamazujesz mapa.

Mozesz to zrobic na kilka sposobow. Najprostszym i brzydkim sposobem, utworz sobie stale tych pol na ktore nie mozesz wejsc, i przed wykonaniem kroku, sprawdzaj czy mozesz go wykonac.

Wydaje mi sie, ze ciagniecie tego nie ma sensu, gdyz nie znasz totalnych podstaw.
Napisz gre sneak to konsola/allegro i zrozumiesz/nauczysz sie.

Offline CoolerKox

  • Użytkownik

# Październik 22, 2011, 13:33:56
Ok, no to zacznę się uczyć pisania prostszych rzeczy. Mam tylko 14 lat, może dlatego... Ale powiedz mi bo teraz mam kilka książek o c++ i chyba najpierw to przeczytam i wtedy wrócę do allegro. Ale co jest źle w tym kodzie bo nie chce nawet odpalić wywala mi jakiś błąd i mam 3 opcje ignoruj, anuluj, próbuj ponownie. I cokolwiek nie zrobię to program się zamknie. I otwiera mi się plik "ctr0msg" kod #define USE_CONSOLE
#include <allegro.h>
int ludek_x = 100, ludek_y = 100;
BITMAP * bufor = NULL;
BITMAP * tlo = NULL;
BITMAP * teren = NULL;
SAMPLE * muzyka = NULL;
BITMAP * ludek = NULL;
 void load_ludek();
 void load_tlo();
 void load_bufor();
 void load_teren();
 void load_muzyka();
 void niszczenie();
//CzasoMierz:D
volatile long speed = 0;
int mapa_x = 0, mapa_y = 0;
short int map[30][30] =
{
12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,11,11,10,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,11,11,10,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,12,12,12,11,10,11,12,12,12,12,12,12,12,12,12,12,12,12,2 ,2 ,2,
12,12,12,12,2 ,2 ,12,12,12,12,12,12,12,10,12,12,12,12,12,12,12,12,12,12,12,2 ,2 ,2 ,2 ,2 ,
    12,12,12,2 ,2 ,2 ,2 ,2 ,12,12,12,12,12,10,12,12,12,12,12,12,12,12,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,
2 ,2 ,2 ,2 ,2 ,2 ,2 ,6 ,6 ,6 ,6 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,
3, 3 ,3 ,3 ,3 ,3 ,3 ,6 ,6 ,6 ,6 ,6 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,
3 ,3 ,3 ,3 ,3 ,3 ,3 ,6 ,6 ,6 ,3 ,6 ,6 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,6 ,6 ,6 ,3 ,
3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,6 ,6 ,6 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,6 ,3 ,3 ,3 ,3 ,
1 ,9 ,9 ,9 ,9 ,9 ,1 ,1 ,1 ,1 ,1 ,3 ,3 ,3 ,1 ,8 ,8 ,8 ,8 ,8 ,1 ,1 ,1 ,3 ,3 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,9 ,9 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,3 ,3 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,9 ,1 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1, 8 ,8 ,8 ,8 ,1 ,1 ,1 ,1 ,1 ,1 ,9 ,9 ,9 ,9 ,9 ,1 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,9 ,9 ,9 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,
5 ,5 ,5 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,5 ,5 ,5 ,1 ,1 ,1 ,1 ,1 ,8 , 8, 8,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,1 ,1 ,1 ,1 ,1 ,7 , 7, 7,1 ,1 ,0 ,0 ,1 ,1 ,1 ,1 ,
4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,

};

void  wys_mape()
{
      int licznik_x, licznik_y;
      for (licznik_x = 0; licznik_x < 30 ; licznik_x++)
      {
      for (licznik_y = 0; licznik_y < 30 ; licznik_y++)
      {                   
           blit(teren,bufor,
           (map[licznik_y + mapa_y][licznik_x + mapa_x]%4) * 40,
           (map[licznik_y + mapa_y][licznik_x + mapa_x]/4) * 40,
           licznik_x * 40,licznik_y * 40,40,40); 
      }
      }     
};

void increment_speed()
{
speed++;
}
END_OF_FUNCTION(increment_speed);
LOCK_VARIABLE(speed);
LOCK_FUNCTION(increment_speed);


int main()
{
allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );

play_sample( muzyka, 255, 127, 1000, 1 );
/**********************************************************************/
while( !key[ KEY_ESC ] )
{
    if( key[ KEY_LEFT ] ) ludek_x--;
   
    if( key[ KEY_RIGHT ] ) ludek_x++;
   
    if( key[ KEY_UP ] ) ludek_y--;
   
    if( key[ KEY_DOWN ] ) ludek_y++;
clear_to_color( bufor, makecol( 150, 150, 150 ) );
masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h );
wys_mape();
blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
}
niszczenie();
return 0;
}
END_OF_MAIN();

/***************************************************/
void load_bufor()
{
bufor = create_bitmap( 640, 480 );
if( !bufor )
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "Wystapil blad!" );
    allegro_exit();
     
}
};
/***************************************************/
  void load_tlo()
{
tlo = load_bmp( "tlo.bmp", default_palette );
if(!tlo)
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "Wystapil blad!" );
    allegro_exit();
     
}
};
/***************************************************/
  void load_teren()
{
teren = load_bmp( "teren.bmp", default_palette );
if(!teren)
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "Teksture pack jest uszkodzony!" );
    allegro_exit();
     
}
};
/***************************************************/
  void load_muzyka()
{
install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" );
set_volume( 255, 255 );
muzyka = load_sample( "muzyka.wav" );
if( !muzyka )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "Prawdopodobnie plik Muzyka.mp3 jest uszkodzony." );
allegro_exit();
 
}
};
/***************************************************/
  void load_ludek()
{
ludek = load_bmp( "ludek.bmp", default_palette );
if(!ludek)
{
    set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
    allegro_message( "Wystapil blad!" );
    allegro_exit();
     
}
};
/***************************************************/
  void niszczenie()
{
destroy_bitmap( teren );
destroy_bitmap( tlo );
destroy_bitmap( bufor );
destroy_sample( muzyka );
destroy_bitmap( ludek );
};

Wiem ,że dużo ale to ostatnie pytanie i odpocznę od allegro. Tylko, że chcę wiedzieć co jest źle.

Offline Fladimir Miel...

  • Użytkownik

# Październik 22, 2011, 14:20:52
Wiek nie ma tu nic do rzeczy. Nie rzucaj się od razu z motyką na słońce i wpierw spróbuj zrozumieć język, w którym chcesz pisać gry, zanim zaczniesz je pisać. Do tego zmień te tutoriale na coś porządniejszego, bo easykoder imo nie jest najlepszym nauczycielem.

Offline CoolerKox

  • Użytkownik

# Październik 22, 2011, 14:34:37
A masz jakiś lepszy tutek? Chętnie poczytam i zacznę od robienia prostych gier 2D jak snake. A C++ znam nawet dobrze.

Offline Fladimir Miel...

  • Użytkownik

# Październik 22, 2011, 16:22:15
Cytuj
A C++ znam nawet dobrze.
Zawsze możesz znać lepiej. ; >

Co do tutków. Swego czasu szperałem po googlach, ale z tego co zauważyłem jedynym godnym uwagi źródłem informacji o Allegro jest jego dokumentacja (mogłem coś przeoczyć). Sam szybko jednak przerzuciłem się na SDL. Mam wspaniałe tutoriale, większą kontrolę nad aplikacją, proste API i wiele dodatkowych bibliotek. Czego chcieć więcej?
« Ostatnia zmiana: Październik 22, 2011, 16:26:48 wysłana przez Fladimir Mielevsky »

Offline CoolerKox

  • Użytkownik

# Październik 22, 2011, 22:10:39
Hmm nie wiem, pisałem w SDL ale jakoś nie czułem się w nim pewnie. Nie wiem czemu i zacząłem pisać w allegro wg mnie przyjemniejsze i łatwiejsze. Po za tym w SDL nie było żadnych Polskich kodów przykładowych, no wiesz kursów.

Offline CoolerKox

  • Użytkownik

# Październik 22, 2011, 22:32:17
To jak myślisz uczyć się Allegro nadal? Czy może wrócić do zwykłego c++ a może jednak jakaś inna biblioteka nie wiem.. Myślałem kiedyś o opengl. Może zacznę projekt Allegro od nowa ?

Offline Fladimir Miel...

  • Użytkownik

# Październik 22, 2011, 22:37:21
Patrząc na Twoje poprzednie posty wnioskuję jednak, że powinieneś na samym początku posiedzieć trochę nad c++. Bo z Twojego kodu wynika, że z jako takim c++ nigdy styczności nie miałeś(np. obiektowość), a do tego ślepo przepisujesz kod easykodera, który nie uczy niczego innego jak złych nawyków.

Offline Rydwan

  • Użytkownik

# Październik 22, 2011, 22:38:30
Moze nie C++, a C.
U Ciebie problem jest w tym, ze uzywasz czegos i nie wiesz jak to dziala. Czyli podstaw mechaniki gry.

Te podstawy mozna nabrac przy Allegro, lecz o wiele latwiej w konsoli (sneak), gdyz uzywajac Allegro nie potrzebnie zawracasz sobie glowe dodatkowymi rzeczami.