Skocz do zawartości

gm ma problem z obliczeniami?


Rekomendowane odpowiedzi

no naprawde ręce mi opadły, od paru tygodni pisałem AI dla przeciwnika... caly czas coś nie grało. próbowałem juz na wszelkie sposoby jakie znam, ciągle były jakieś bugi.

przeglądałem cały kod, pisałem od nowa no koorvicy dostawałem, ale sie udało. i powiedzcie mi bo ja juz zgłupiałem do reszty :boxed:

 

GML
if hspeed>0

{

if (place_meeting(x+(sprite_width/2)+7,y+1,obj_podloze)=false)

{hspeed=-run}}

 

if hspeed<0

{

if (place_meeting(x-(sprite_width/2)-7,y+1,obj_podloze)=false)

{hspeed=run}}

 

czy cos tu jest nie tak? ludzik bada czy ma przed sobą podloze, jak nie ma zmienia kierunek. kolejność działań chyba znam, juz liczyłem na kalkulatorze, ludek idzie w prawo jest ok, idzie w lewo spada w dół :boxed:

 

zmieniłem w drugiej czesci kod na

GML
if (place_meeting(x-30,y+1,obj_podloze)=false)

działa :blink: :blink: :blink:

 

czy ja czegos nie zauważałem ?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Sprawdź sobie w tym debugu, ile wynosi wartość

 

place_meeting(x-(sprite_width/2)-7,y+1,obj_podloze

 

oraz

 

place_meeting(x-30,y+1,obj_podloze)

 

Przy czym do zmiennych: x, y, sprite_width dopisz np. numer id konkretnego ludzika (w nawiasach), np.

 

place_meeting((100343).x-((100343).sprite_width/2)-7,(100343).y+1,obj_podloze

 

i może też na wszelki wypadek sprawdź:

 

obj_ludzik.sprite_width

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if hspeed>0

{

if (place_meeting(x+(sprite_width/2)+7,y+1,obj_podloze)=false)

{hspeed=-run}}

 

if hspeed<0

{

if (place_meeting(x-(sprite_width/2)-7,y+1,obj_podloze)=false)

{hspeed=run}}

Zauważ, że jeżeli wykonasz cztery pierwsze linijki kodu, to na pewno wykonasz też cztery kolejne (dlaczego?).

Odnośnik do komentarza
Udostępnij na innych stronach

sprite_width uwzględnia manipulację image_xscale, więc może być ujemne. chcesz ominięcia tego, dziel przez image_xscale lub użyj sprite_get_width

 

gdybyś odpalił debuga i sprawdził to, co poleca ci sprawdzić korodzik, doszedłbyś do właśnie tego.

Odnośnik do komentarza
Udostępnij na innych stronach

Najlepiej użyć show_message(interesująca cię wartość/funkcja) w celu sprawdzenia, czy wyniki zgadzają się z obliczeniami. Stosuję to w każdym projekcie, nigdy mnie nie zawiodło.

to zależy też od sytuacji, jeśli musisz obserwować wartość na przestrzeni większej ilości klatek, zdecydowanie lepszy będzie debug mode, gmowy lub własny.

Odnośnik do komentarza
Udostępnij na innych stronach

Dobry też jest show_debug_message() o czym Nirvan się mocno przekonał jak mu to pokazałem.

 

Pokażę wam mój log stworzony za pomocą show_debug_message(), który rejestruje poczynania AI:

Debug[0] = 1
Debug[0] = 2
Debug[0] = 0
Debug[1] = 1
Debug[2] = 1
endOfPath
 choosePosition 1
 gChoosenUnit 100415
   moveAttempts = 5
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 4
     moveAttempts-1 = 4
 choosePosition 1
 gChoosenUnit 100415
   moveAttempts = 4
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 3
     moveAttempts-1 = 3
 choosePosition 1
 gChoosenUnit 100415
   moveAttempts = 3
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 2
     moveAttempts-1 = 2
 choosePosition 1
 gChoosenUnit 100415
   moveAttempts = 2
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 1
     moveAttempts-1 = 1
 choosePosition 1
 gChoosenUnit 100415
   moveAttempts = 1
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 0
     moveAttempts-1 = 0
    unit deactivate
 choosePosition 1
 gChoosenUnit 100415
   moveAttempts = 0
   endTurn2
Turn is ending...
moveAttempts = 12
computeType
 choosePosition 0
 gChoosenUnit 100414
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 5
     moveAttempts-1 = 11
 choosePosition 1
 gChoosenUnit 100416
 computeTarget
unit: 100416 new target: 100161
  moveCount = -0.22
  AI_moveAttempt = 6
  moveAttempts-6 = 5
endOfPath
 choosePosition 1
 gChoosenUnit 100416
   moveAttempts = 5
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100414
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 4
     moveAttempts-1 = 4
 choosePosition 1
 gChoosenUnit 100416
   moveAttempts = 4
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100414
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 3
     moveAttempts-1 = 3
 choosePosition 1
 gChoosenUnit 100416
   moveAttempts = 3
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100414
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 2
     moveAttempts-1 = 2
 choosePosition 1
 gChoosenUnit 100416
   moveAttempts = 2
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100414
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 1
     moveAttempts-1 = 1
 choosePosition 1
 gChoosenUnit 100416
   moveAttempts = 1
   choosePosition+1 = 0
 choosePosition 0
 gChoosenUnit 100414
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 0
     moveAttempts-1 = 0
    unit deactivate
 choosePosition 1
 gChoosenUnit 100416
   moveAttempts = 0
   endTurn2
Turn is ending...
moveAttempts = 12
computeType
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 5
     moveAttempts-1 = 11
 choosePosition 1
 gChoosenUnit 100415
 computeTarget
  moveCount = 2.90
endOfPath
 choosePosition 1
 gChoosenUnit 100415
 computeTarget
   choosePosition+1 = 0
     AI_moveAttempt = 5
     moveAttempts-1 = 10
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 4
     moveAttempts-1 = 9
 choosePosition 1
 gChoosenUnit 100415
 computeTarget
   choosePosition+1 = 0
     AI_moveAttempt = 4
     moveAttempts-1 = 8
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 3
     moveAttempts-1 = 7
 choosePosition 1
 gChoosenUnit 100415
 computeTarget
   choosePosition+1 = 0
     AI_moveAttempt = 3
     moveAttempts-1 = 6
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 2
     moveAttempts-1 = 5
 choosePosition 1
 gChoosenUnit 100415
 computeTarget
   choosePosition+1 = 0
     AI_moveAttempt = 2
     moveAttempts-1 = 4
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 1
     moveAttempts-1 = 3
 choosePosition 1
 gChoosenUnit 100415
 computeTarget
   choosePosition+1 = 0
     AI_moveAttempt = 1
     moveAttempts-1 = 2
 choosePosition 0
 gChoosenUnit 100413
 computeTarget
   choosePosition+1 = 1
     AI_moveAttempt = 0
     moveAttempts-1 = 1
    unit deactivate
 choosePosition 1
 gChoosenUnit 100415
 computeTarget
   choosePosition+1 = 0
     AI_moveAttempt = 0
     moveAttempts-1 = 0
    unit deactivate
 choosePosition 0
 gChoosenUnit 100413
   moveAttempts = 0
   endTurn2

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