Skocz do zawartości

Sprawdzanie, czy pozycja wolna?


cysior

Rekomendowane odpowiedzi

Chciałem zrobić sprawdzanie czy dana pozycja jest wolna od obiektu_A(solid), jeśli jest pusta to dana tablica przyjmuje wartość 0. Niestety tak nie jest.

 

 

STEP, obiekt_B

GML
for(n=1;n<=9;n+=1)

for(m=1;m<=9;m+=1)

{

 

if place_free(32+32*n,32+32*m)

{

global.siatka[n,m]=0

}

 

}

 

 

Z góry dziękuję za pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

czy ustawiłeś obiekt_A w kwadracie pierwszych 64x64 px ? To jest obszar niesprawdzany przez Twój kod... pz tym dodaj jeszcze warunek else, bo nie wiem, czy nie zostaje ci przypadkiem w tablicy 0 z poprzedniej sesji lub ustawiania...

 

Edit:

no i jest

GML
for(...)

{

for(...)

{

//itd.

}

}

bo teraz idzie na ukos sprawdza pozycje (1,1)(2,2)(3,3) itd.
Odnośnik do komentarza
Udostępnij na innych stronach

czy ustawiłeś obiekt_A w kwadracie pierwszych 64x64 px ? To jest obszar niesprawdzany przez Twój kod...

 

Hmm... Dlaczego? Jeżeli mam obiekt_A, na pozycji 64x64 to 32+32*1=64.

obiekt_A ma wymiary 32x32.

 

Edit:

no i jest

GML
for(...)

{

for(...)

{

//itd.

}

}

bo teraz idzie na ukos sprawdza pozycje (1,1)(2,2)(3,3) itd.

 

 

Chodzi ci o to? :

GML
for(n=1;n<=9;n+=1)

{

for(m=1;m<=9;m+=1)

{

if place_free(32+32*n,32+32*m)

{

global.siatka[n,m]=0

}

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

tak... pętla jest teraz dobrze.

 

- - - -

 

GML
for(n=1;n<=9;n+=1)

{

for(m=1;m<=9;m+=1)

{

if place_free(32+32*n,32+32*m)

{

global.siatka[n,m]=0

}

}

}

Pętle zaczynasz od cyfry 1. tak więc 1*32=32 do tego dodaj drugie 32 z tąd: 32+32*n i masz 64. Oznacza to, że nie sprawdzasz współrzędnych: (0,0) (0,32) oraz (32,0) (32,32).

 

no i teraz mi wpadło tak do głowy... zamiast place_free() użyj collision_point().

Odnośnik do komentarza
Udostępnij na innych stronach

dodaj jeszcze warunek else, bo nie wiem, czy nie zostaje ci przypadkiem w tablicy 0 z poprzedniej sesji lub ustawiania...

 

GML
for(n=1;n<=6;n+=1)

{

for(m=1;m<=6;m+=1)

{

 

if collision_point(32+32*n,32+32*m,obiekt_A,1,1)

{

global.siatka[n,m]=1;

}

else

{

global.siatka[n,m]=0;

}

}

}

spróbuj z czymś takim
Odnośnik do komentarza
Udostępnij na innych stronach

GML
for(n=1;n<=6;n+=1)

{

for(m=1;m<=6;m+=1)

{

 

if collision_point(32+32*n,32+32*m,/* tutaj np. parent albo coś innego. Coś, co ma być zapisane w tablicy*/,1,1)

{

global.siatka[n,m]=collision_point(32+32*n,32+32*m,/* to, co w warunku */,1,1);

}

else

{

global.siatka[n,m]=0;

}

}

}

Można? Można! Tylko trzeba pomyśleć.
Odnośnik do komentarza
Udostępnij na innych stronach

Tak naprawdę mogłoby być:

GML
for(i = 1; i <= 9; i += 1)

for(j = 1; i <= 9; j += 1)

global.siatka[j,i] = collision_point(32+32*i,32+32*j,all,true,true)

jeśli pogodzisz się z tym, że w miejscu, w ktorym nie ma obiektu, tablica nie ma wartości 0, a -4.

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