Skocz do zawartości

C++ Pierwsze starcie :D


sebiq

Rekomendowane odpowiedzi

Witam!

Ostatnio zainteresowało mnie programowanie C++. Czytałem kilka poradników ale w żadnym nie ma jak dodać grafikę itp ;). I tu wielka prośba do was:

-Proszę o jakiś poradnik

-Wytłumaczenie trudniejszych rzeczy

-Jak zrobić choćby najprostszy program/grę

 

Zrobiłem już kalkulator :D I trochę nie pojmuję tablic więc teraz wasza kolej :D

Z góry thx :)

Odnośnik do komentarza
Udostępnij na innych stronach

widzisz, tu nie ma tak prosto jak w GMie - od każdego modułu (grafika, dźwięki, itp) potrzebujesz biblioteki która to obsłuży, musisz się zdecydować najlepiej na jakiś silnik który będzie miał to wszystko (lub większość) w sobie. Jedni biorą Allegro, inni SDL, ja ostatnio w sieci znalazłem przyjemny i prosty w użyciu silniczek - HGE, polecam sprawdzić, ma tutoriale (niestety po angielsku): http://hge.relishgames.com/

A co do wytłumaczenia trudniejszych rzeczy - pytaj, a z chęcią odpowiem :)

Odnośnik do komentarza
Udostępnij na innych stronach

Co rozumiesz poprzez zainicjowanie? czy owe biblioteki sa poprawnie zainstalowane? jesli tak to chodzi o to ze funkcja inicjujaca nie wykonuje sie wlasciwie? wyrzuca jakies errory? zawsze moze byc wina braku zalinkowanych libow w linkerze. dobrze bylo by gdybys w miare mozliwosci opisal co robisz, to sie znajdzie przyczyne :)

Odnośnik do komentarza
Udostępnij na innych stronach

jesli sa jakies includy i liby to zapewne trzeba je poprzenosic do odpowiednich folderow includes oraz libs. jak masz mozliwosc zapodaj log bledow jakie wywala, bez tego nie zdzialamy wiele.

Odnośnik do komentarza
Udostępnij na innych stronach

hah udało sie z buforem rozdzielczość źle miałem teraz jest znowu błąd xD sprity trzeba jakoś przypisać sprita pod dany klawisz narazie mam tak:

#include <allegro.h>

volatile long speed = 0;

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,640,480,0,0);

install_timer();

install_int_ex(increment_speed, BPS_TO_TIMER(80));

 

BITMAP *bufor = NULL;

BITMAP *ludek0 = NULL;

BITMAP *ludek1 = NULL;

BITMAP *ludek2 = NULL;

BITMAP *ludek3 = NULL;

 

bufor = create_bitmap(640,480);

if (!bufor)

{

set_gfx_mode(GFX_TEXT,0,0,0,0);

allegro_message("Nie mogę utworzyć bufora !");

allegro_exit();

return 0;

}

 

ludek0 = load_bmp("down.bmp",default_palette);

ludek1 = load_bmp("up.bmp",default_palette);

ludek2 = load_bmp("left.bmp",default_palette);

ludek3 = load_bmp("right.bmp",default_palette);

 

int ludek_x = 100, ludek_y = 100;

int frame = 0;

 

while( !key[KEY_ESC])

{

while( speed > 0)

{

 

if( key[KEY_LEFT]) ludek_x--;

if( key[KEY_RIGHT]) ludek_x++;

if( key[KEY_UP]) ludek_y--;

if( key[KEY_DOWN]) ludek_y++;

speed--;

 

frame++;

if( frame > 80) frame=0;

}

 

clear_to_color(bufor, makecol(150,150,150));

 

if( frame<20) { draw_sprite(bufor, ludek0, ludek_x, ludek_y); }

else if( frame>=20 && frame<40) { draw_sprite(bufor, ludek1, ludek_x, ludek_y); }

else if( frame>=40 && frame<60) { draw_sprite(bufor, ludek2, ludek_x, ludek_y); }

else if( frame>=60 && frame<80) { draw_sprite(bufor, ludek3, ludek_x, ludek_y); }

 

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

}

 

remove_int( increment_speed);

destroy_bitmap(ludek0);

destroy_bitmap(ludek1);

destroy_bitmap(ludek2);

destroy_bitmap(ludek3);

destroy_bitmap(bufor);

allegro_exit();

return 0;

}

END_OF_MAIN();

Odnośnik do komentarza
Udostępnij na innych stronach

człowieku najpierw naucz się chociaż do "klas " potem bierz się za biblie graficzną bo jak ty tylko przepisujesz kod to na dobre ci nie wyjdzie a po zatym wiele więcej w c++ niż w gml nie da sie zrobic w grafie 2D sam sie o tym przekonałem jedno i to samo tylko satysfakcja że gra zaprogramowana a nie wyklinana XD

Odnośnik do komentarza
Udostępnij na innych stronach

po zatym wiele więcej w c++ niż w gml nie da sie zrobic w grafie 2D sam sie o tym przekonałem

bullshit roku.

Nie wiem z jakich bibliotek korzystałeś ale widać dość stare musiały być ;>

Odnośnik do komentarza
Udostępnij na innych stronach

Masz tu mały przykładzik na poruszanie się obiektu "ludzik" :sp_ike: :

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(screen, makecol(10,10,10)); 
  //rest(1); 
  masked_blit( ludek, screen, 0,0, ludek_x, ludek_y, ludek->w, ludek->h); 
}

Odnośnik do komentarza
Udostępnij na innych stronach

a zauwazyles to?:

while( !key[KEY_ESC])

{

while( speed > 0)

{

 

if( key[KEY_LEFT]) ludek_x--;

if( key[KEY_RIGHT]) ludek_x++;

if( key[KEY_UP]) ludek_y--;

if( key[KEY_DOWN]) ludek_y++;

speed--;

 

frame++;

if( frame > 80) frame=0;

}

po co masz druga petle w petli glownej? na moje oko nie spelnia swojego zadania

Odnośnik do komentarza
Udostępnij na innych stronach

a zauwazyles to?:

 

po co masz druga petle w petli glownej? na moje oko nie spelnia swojego zadania

pętla while( speed > 0) jest potrzebna w allegro, jak dobrze pamiętam. kod wygląda mi na skopiowany z jakiegoś tutoriala poza tym.

 

natomiast głupotą jest

frame++;
if( frame > 80) frame=0;

wynika z tego, że ma się kręcić dookoła

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...