Skocz do zawartości

AI ---> Si jak ktoś woli :) ---> id przeciwnika


kowal

Rekomendowane odpowiedzi

Witam :) Po długiej przerwie spowodowanej... hmm lenistwem chyba :P powracam do nauki gml hihhi. Ok mam problem, pamiętam, że ktoś mi już probował to wczesniej wyjasnic - bodajze tymon :) - ale nie skumalem tego chyba, wiec zapytam jeszcze raz - nie zaszkodzi :). Otoz mam skrypcik ai przeciwnika. i zachodzi problem, bo w roomie mam obiektow "przeciwnik" - tego samego typu na przykład 10. i teraz chciałbym, aby ten skrypt ktory podam nizej odnosil sie ttylko do tego obiektu z ktorym teraz wspoldzialam, a nie zeby takze inne obiekty tego typu zaczęły na przykład jakoms akcje . Uhhhhhhhh pewnie i tak nie skapniecie o co biega :P jakby co to sproboje jeszcze jasniej to opisać:) - jak nie zrozumieliscie hihh - wiem ze coś z id obiektu trza tu zrobic.

 

A oto kod:

w alarm1 gracza:

 

global.zycie-=1

 

w step gracza:

 

// to wszystko do jednego przeciwnika - przeciwnik1
{
  
   with(przeciwnik1)
   {
   if(direction < 22.5)
      {
          sprite_index = p1dol;//bylo z n
      }
      else if (direction < 67.5)
      {
          sprite_index = p1gora;//s_walk_ne
      }
      else if (direction < 112.5)
      {
          sprite_index = p1gora;//s_walk_n
      }
      else if (direction < 157.5)
      {
          sprite_index = p1lewo;//s_walk_nw
      }
      else if (direction < 202.5)
      {
          sprite_index = p1lewo;//s_walk_w
      }
      else if (direction < 247.5)
      {
          sprite_index = p1dol;//s_walk_sw
      }
      else if (direction < 292.5)
      {
          sprite_index = p1dol;//s_walk_s
      }
      else if (direction < 337.5)
      {
          sprite_index = p1prawo;//s_walk_se
      }  
      else
      {
          sprite_index = p1prawo;//s_walk_e
      }
   }
{


   if distance_to_object(przeciwnik1)<15
      {
      przeciwnik1.sprite_index=p1wali;
      if alarm[1]=-1   // zabiera graczowi zycie co 30 jednostek czasu( czyli 1 sekunde). ( w alarm1 gracza okreslamy ile ma zabierac zycia)
          {
            alarm[1]=30//30 mozemy zmniejszyc lub zwiekszyc - to jest czestotliwosc-teraz jest 30 czyli 1 sekunda.
          }
        }
   
        }   

   {
   if distance_to_object(przeciwnik1)>80
   with(przeciwnik1) speed=0 
   
   }

   
   {
   if distance_to_object(przeciwnik1)<80
   with (przeciwnik1)move_towards_point(gracz.x,gracz.y,1)
   }
 
   if distance_to_object(przeciwnik1)<10
    {
       
       with(przeciwnik1) speed=0;     
       
    }
  
    
}

//koniec akcji z przeciwnikiem1
   

 

 

 

 

w create przeciwnika1:

 

przeciwnikzycie=100//zycie przeciwnika

 

w step przeciwnika1:

if przeciwnikzycie<0//smierc przeciwnika
{
sound_play(smierc);// odglos smierci przeciwnika
effect_create_above(ef_smoke,x,y,2,c_white)//efekt smierci - dymek leci :)
instance_destroy();
}

 

 

 

Please help me :)

Odnośnik do komentarza
Udostępnij na innych stronach

Żeby sprawdzić typ obiektu masz tak:

- object_index

- object_get_name(index)

Pierwsz możesz użyć tak:

if object_index=nazwa_obiektu

A drugi:

if object_get_name(object_index)='nazwa_obiektu'

Chyba o to Ci chodzi ;]

 

EDIT

Hmm... masz 10 obiektów tego samego typu i chcesz aby gracz reagował tylko na jednego? To masz tak:

- id - identyfikator obiektu (każdy obiekt ma własny).

- instance_nearest(x,y,obj) - zwraca id najbliższego obiektu.

- instance_furthest(x,y,obj) - zwraca id najdalszego obiektu.

- instance_position(x,y,obj) - zwraca id obiektu w pozycji x,y.

Do obiektów odwołuj się tak:

i=id;
i.<instrukcja>;

i= instance_nearest(x,y,obj);
i.<instrukcja>;

...

Odnośnik do komentarza
Udostępnij na innych stronach

dzięki wielkie tymonie :) ale niestety nie umiem do konca tego zastosować :/

mam na przykład takom sytuacje:

 

    {
   if distance_to_object(przeciwnik1)<80
   with (przeciwnik1)move_towards_point(gracz.x,gracz.y,1)
   }

 

i jak zrobic zeby jeden - ten blizszy obiekt szedł w strone gracza, a nie wszystkie obiekty tego typu??

 

albo:

 

{
with(przeciwnik1)przeciwnikzycie-=30// ten czar zabiera przeciwnikowi1 30 punktow zycia.
with(obszar)instance_destroy();// niszczy obszar czaru
global.mana-=10// poz zuceniu czaru odejmuje nam mane.
}

 

i zeby zginął tylko jeden obiekt - ten na ktorym teraz działamy, a nie wszystkie. I zeby nie było tez tak, ze jak na przykład zabiore jednemu obiektowi na prz. 90/100 hp. a potem innemu 10 to to liczy, ze razem zabrałem 100/100 a nie tak, ze indywidualnie kazdemu obiektowi. Jeszcze raz prosze o zrozumiale dla mego ciemnego umysłu wytłumaczenie hihhi. Pozdro.

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