Skocz do zawartości

Przeciwnik niemoże chodzic na skosy


Jecht

Rekomendowane odpowiedzi

objectTarget = nazwa_obiektu;  // obiekt docelowy
objectSpeed = 7;  // szybkosc poruszania sie
cellSize = 50;  // wielkosc 1 komorki siatki po ktorej obiekt sie porusza

if (!variable_local_exists('objectDirection'))
   {
   x = round(x / cellSize) * cellSize;
   y = round(y / cellSize) * cellSize;
   objectDirection = 0;
   objectX = x;
   objectY = y;
   }

if (x == objectX && y == objectY)
   {
   objectDirection = round(point_direction(x, y, objectTarget.x, objectTarget.y) / 90) * 90;

   objectX = x + sin(degtorad(objectDirection + 90)) * cellSize;
   objectY = y + cos(degtorad(objectDirection + 90)) * cellSize;
   }

x += sign(objectX - x) * min(objectSpeed, abs(x - objectX));
y += sign(objectY - y) * min(objectSpeed, abs(y - objectY));

Odnośnik do komentarza
Udostępnij na innych stronach

O niczym nie zapomnialem poprostu chcialem abys sam wpisal tam kod na zmiane sprita ;)

 

I nie mozliwe ze nie dziala :jezor:

 

No chyba ze twoj komputer przykladowo w lewo chodzi pod katem 179, w gore pod katem 89, w lewo = 359, w dol 269 to no nie bedzie dzialac :)

Odnośnik do komentarza
Udostępnij na innych stronach

nie, właśnie nie działa a użyłem tego kodu powyżej, Zakola.

I jak w końcu zrobic to żeby omijał solidy??

 

EDIT: zapomniałem dodac że jak dodam ten kod na zmiane sprite'ów to przeciwnik jest cały czas animowany biegiem w prawo

Odnośnik do komentarza
Udostępnij na innych stronach

ęłęó// Zmienne do edycji
objectTarget = nazwa_obiektu; // obiekt docelowy
objectSolid = nazwa_obiektu; // obiekt do ominiecia
objectSpeed = 5; // szybkosc poruszania sie
cellSize = 50; // wielkosc 1 komorki siatki po ktorej obiekt sie porusza
spriteUp = sprite_do_gory; // sprite w ruchu do gory
spriteRight = sprite_w_prawo; // sprite w ruchu w prawo
spriteBottom = sprite_na_dol; // sprite w ruchu na dol
spriteLeft = sprite_w_lewo; // sprite w ruchu w lewo

// Zmienne systemowe
if (!variable_local_exists('objectDirection'))
   {
   x = round(x / cellSize) * cellSize;
   y = round(y / cellSize) * cellSize;

   objectCollision = 0;
   objectDirection = 0;

   objectX = x;
   objectY = y;
   }

// Jezeli obiekt dotarl do punktu kontrolnego
if (x == objectX && y == objectY)
   {
   // Ustalenie kierunku docelowego
   objectCollision = 0;
   objectDirection = round(point_direction(x, y, objectTarget.x, objectTarget.y) / 90) * 90;

   // Sprawdzenie kolizji z solid
   while ((collision_line(x, y, objectX, objectY, objectSolid, 1, 1) || objectCollision == 0) && abs(objectCollision) < 3)
      {
      // Wyznaczenie punktu kontrolnego
      objectX = x + sin(degtorad(objectDirection + 90)) * cellSize;
      objectY = y + cos(degtorad(objectDirection + 90)) * cellSize;

      // Obliczenie opcjonalnego kierunku
      objectCollision = (objectCollision + sign(sign(objectCollision) + 1)) * -1;
      objectDirection += objectCollision * 90;
      }
   }

// Zmiana sprite
switch (((sign(objectX - x) + 1) * 10) + (sign(objectY - y) + 1))
   {
   case 10: {sprite_index = spriteUp; break;}
   case 12: {sprite_index = spriteBottom; break;}
   case 1: {sprite_index = spriteLeft; break;}
   case 21: {sprite_index = spriteRight; break;}
   }

// Przemieszczenie obiektu
x += sign(objectX - x) * min(objectSpeed, abs(x - objectX));
y += sign(objectY - y) * min(objectSpeed, abs(y - objectY));

 

Dodam jeszcze, ze calosc mozna zrobic prosciej, w 3 linijkach, uzywajac Motion Planning.

 

EDIT: naprawiem sprity i zmienilem omijanie na podany konkretny obiekt (mozna skorzystac z parentow); zeby omijac solidy trzeba by petla przeleciec wszystkie pixele od aktualnego obiektu do punktu kontrolnego w poszukiwaniu solidow, ale tego juz mi sie nie chce pisac ;p

Odnośnik do komentarza
Udostępnij na innych stronach

Jest już perfekto, poza tym że wciąż nie omija solidów :( Sprite'y się zmieniają ale np. ja idzie do góry do animowany jest biegiem w prawo ale to już sobie podmienię :)

 

No niby można motion planningiem ale chodzi jeszcze o to żeby chodził tylko góra dół lewo prawo a tego już nie umiem tam dodać :( Wie ktoś jak? Bo musi omijać solidy, a w tym kodzie Zakola nie omija

 

a co to jest?:

 

ęłęó// Zmienne do edycji

 

przez to gra mi się nie włącza :P

 

Warn za floodowanie forum (3 posty pod rząd). Połączyłem je.

Marmot.

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