Skocz do zawartości

Funkcja, która przerywa program


m97

Rekomendowane odpowiedzi

Witam, napisałem funkcję pewnej klasy, jednak wywołuje ona dziwny efekt, przerywa program.

Oto funkcja:

GML
void World::draw_world(){

for(int a = view_y;a < view_y + 50;a++){

for(int b = view_x;b < view_x + 80;b++){

switch(pole_gry[a*b]){

case 0:

break;

case 1:

dirt_sprite.x = b*16; // współrzędna x na ekranie

dirt_sprite.y = a*16; // współrzędna y na ekranie

dirt_sprite.w = dirt_bitmap->w; // szerokość wklejanego obiektu

dirt_sprite.h = dirt_bitmap->h; // wysokość wklejanego obiektu

SDL_BlitSurface(dirt_bitmap, NULL, screen, &dirt_sprite);

break;

}

}

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
Witam, napisałem funkcję pewnej klasy, jednak wywołuje ona dziwny efekt, przerywa program.

Oto funkcja:

GML
void World::draw_world(){

for(int a = view_y;a < view_y + 50;a++){

for(int b = view_x;b < view_x + 80;b++){

switch(pole_gry[a*b]){

case 0:

break;

case 1:

dirt_sprite.x = b*16; // współrzędna x na ekranie

dirt_sprite.y = a*16; // współrzędna y na ekranie

dirt_sprite.w = dirt_bitmap->w; // szerokość wklejanego obiektu

dirt_sprite.h = dirt_bitmap->h; // wysokość wklejanego obiektu

SDL_BlitSurface(dirt_bitmap, NULL, screen, &dirt_sprite);

break;

}

}

}

}

Wtf, po co ci w ogóle case 0? Co to za switch dupny lol

Odnośnik do komentarza
Udostępnij na innych stronach

w takim przypadku w ogóle switch nie potrzebny o_o

wrzuć to w ifa

 

 

pozatym bez sensu masz to pole_gry[a*b]

Untitled7f3fd.png

 

dla a = 2, b = 5 indeks tablicy = 10

a = 5, b = 2 indeks tablicy = 10

itd

indeksy na innych pozycjach się powtarzają

 

jeżeli dobrze to zrozumiałem o_o

Odnośnik do komentarza
Udostępnij na innych stronach

A gdy przykładowo Twoje view_y/view_x znajduje się w rogu mapy... To czy przypadkiem w pewnym momencie nie próbujesz wykroczyć poza zakres pole_gry[]?

Poza tym, tak jak CrackGM zauważył - bez sensu :P Albo użyj dwuwymiarowej tablicy, albo, jeśli chcesz koniecznie "spakować" mapę do jednowymiarowej tablicy, to: pole_gry[w*y+x], gdzie w - szerokość Twojej mapy, x, y - współrzędne, które aktualnie badasz.

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ę...