Skocz do zawartości

Wrog ktory goni jak nas zobaczy i jak znikniemy mu zdystansu to wraca z powrotem do punktu,ktory poczatkowego


Rekomendowane odpowiedzi

Cześć..mam taki problem...

próbuje ustawić tak,że jak wróg mnie zobaczy na odpowiednim dystansie w pozycji wyłącznie x,to zaczyna mnie gonić aż zejdę z jego dystansu,a jak już zejdę z jego dystansu,to on wraca np do punktu początkowego tam gdzie mnie ostatnio widział i chodzi dalej spokojnie...I żeby nie skakał jak mnie goni.

Zacząłem tu w kodzie grzebać,ale coś spierdzieliłem..ostatecznie udało mi się zrobić,że jak mnie zobaczył to gonił,ale już nie przestał mnie gonić...

pomóżcie:/

 

 

 

 

 

GML
///Poruszanie sie

///AI wroga

//wrog na odpowiednim dystansie jak nas zauwazy,to zaczyna gonic

if distance_to_object(obj_player) <=80

{

if(abs(y-obj_player.y)<32) && (obj_player.y>=y)

move_towards_point(obj_player.x,obj_player.y,8);

}

else

{

if distance_to_object(obj_player) > 40

{

move_towards_point(obj_player.x,y,0);

}

}

 

 

 

 

if place_free(x,y+1)

{gravity = 0.5}

else

{gravity = 0}

 

if at=1

{

at=2

speed=4

}

 

if at=2

{

if hspeed<0

{

image_xscale = -1;

if !place_meeting(x-30,y+10,par_podloze)

speed*=-1

else if place_meeting(x-1,y,par_podloze )

speed*=-1

t=1

}

 

else if hspeed>0

{

image_xscale = 1;

if !place_meeting(x+30,y+10,par_podloze)

speed*=-1

else if place_meeting(x+1,y,par_podloze)

speed*=-1

t=2

}

}

 

//Smierc wroga

if hp<0

instance_destroy()

//

image_speed=0.5

//

if hp<0

{

instance_destroy()

}

 

//animacja

image_speed=0.3

 

 

//Gdy wrog zostaje atakowany mruga

if global.zegarObrazenWroga > 0 {

visible = !visible;

global.zegarObrazenWroga -= 1;

} else {

visible = true;

}

 

if hp <= 0 {

 

instance_destroy();

 

dead = true; //wywolujemy alarm gdy wrog jest martwy

 

//tworzymy losowa ilosc punktow po zabiciu wroga,oraz napis,ktory sie nad nim wyswietla z iloscia punktow losowych

z = instance_create(x,y-10,obj_floating_txt);

global.pScore+=pointvalue

z.txt = "$" + string(pointvalue);

z.yspeed = -4;

 

 

 

 

with instance_create(x,y,obj_entity_die) with instance_create(x,y,obj_czupryniak_ginie) {

image_xscale = other.image_xscale;

image_yscale = other.image_yscale;

hspd = other.hspd;

vspd = other.vspd;

audio_play_sound(dzwiek_wrog_ginie, 1, false); //odtwarzamy dzwiek przy smierci wroga

}

}

 

// czasowy wskrzeszenie wroga po smierci

if (dead == true)

{

 

 

instance_create(x,y,obj_spawn_czupryniak);

 

}

Odnośnik do komentarza
Udostępnij na innych stronach

Nie czaję twojego kodu, to powiem Ci jak ja bym to zrobił.

Każdy obiekt ma zmienną xstart i ystart. Wykorzystajmy ją do warunków. Najpierw sprawdzamy czy gracz jest na dystansie który on pokonuje. Ustalmy sobie m_dist=200;

GML
if(point_distance(xstart,0,obj_player.x,0) <= m_dist)

//costam</span></span>

Tam gdzie jest y1 i y2, dałem 0, bo ignorujemy y (w sumie to wystarczy odjąć x ale csii)

I teraz dokańczamy ten kod

GML
if(point_distance(xstart,0,obj_player.x,0) <= m_dist)

{

move_towards_point(obj_player.x,y,2);

}

else

if(distance_to_point(xstart,ystart)>2)

move_towards_point(xstart,ystart,1);

Jakoś tak.

 

W ogóle o co chodzi z tym kodem ;o

GML
with instance_create(x,y,obj_entity_die) with instance_create(x,y,obj_czupryniak_ginie)

Masz with, w with, nawet nie chce wiedzieć jak wtedy other działa.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie czaję twojego kodu, to powiem Ci jak ja bym to zrobił.

Każdy obiekt ma zmienną xstart i ystart. Wykorzystajmy ją do warunków. Najpierw sprawdzamy czy gracz jest na dystansie który on pokonuje. Ustalmy sobie m_dist=200;

GMLif(point_distance(xstart,0,obj_player.x,0) <= m_dist)

//costam

Tam gdzie jest y1 i y2, dałem 0, bo ignorujemy y (w sumie to wystarczy odjąć x ale csii)

I teraz dokańczamy ten kod

GMLif(point_distance(xstart,0,obj_player.x,0) <= m_dist)

{

move_towards_point(obj_player.x,y,2);

}

else

if(distance_to_point(xstart,ystart)>2)

move_towards_point(xstart,ystart,1);

Jakoś tak.

 

W ogóle o co chodzi z tym kodem ;o

GML with instance_create(x,y,obj_entity_die) with instance_create(x,y,obj_czupryniak_ginie)

Masz with, w with, nawet nie chce wiedzieć jak wtedy other działa.

 

Czyli brakowało mi funkcji point_distance,dzięki...

Co do with to działa bardzo dobrze chociaż faktycznie patrząc teraz na mój kod,to bez sensu jest powtórzenie tego...

No dobra i ostatnie pytanie...

chciałem wykorzystać image_alpha żeby osiągnąć efekt pojawiającego się wroga i zanikającego...O co dokładnie chodzi,a no o to,że wróg sobie spaceruje i co jakiś czas zanika prze chwilę,a potem znowu się pojawia...czyli zanika spacerując sobie...

Odnośnik do komentarza
Udostępnij na innych stronach

Jak chcesz mieć to tak płynnie, to polecam alarmy, albo coś takiego jak właśnie zmienna niewidka i ociupinkę matematyki.

Zmodyfikujmy tamten kod.

GML
if(point_distance(xstart,0,obj_player.x,0) <= m_dist)

{

move_towards_point(obj_player.x,y,2);

niewidka--;

if(niewidka<0)

niewidka=0;

}

else

if(distance_to_point(xstart,ystart)>2)

{

move_towards_point(xstart,ystart,1);

niewidka++;

if(niewidka>100)

niewidka=100;

}

image_alpha=(niewidka+1)/100;

Nie jestem pewien czy to zadziała.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak chcesz mieć to tak płynnie, to polecam alarmy i ociupinkę matematyki.

Zmodyfikujmy tamten kod.

GMLif(point_distance(xstart,0,obj_player.x,0) <= m_dist)

{

move_towards_point(obj_player.x,y,2);

niewidka--;

if(niewidka<0)

niewidka=0;

}

else

if(distance_to_point(xstart,ystart)>2)

{

move_towards_point(xstart,ystart,1);

niewidka++;

if(niewidka>100)

niewidka=100;

}

image_alpha=1/niewidka;

Nie jestem pewien czy to zadziała.

 

dzięki Suttiku po testuje to na alarmach;)

 

 

co do chodzenia wroga

 

to prawie jest dobrze,tylko w pozycji Y nie chce żeby mi go wykrywał,bo obecnie wykrywa i jak mnie już zobaczy,to jak szalony biega dopóki mu nie zejdę z pozycji Y,a chce żeby Y ignorował całkiem;)

 

 

GML
if(point_distance(xstart,0,obj_player.x,0) <= 250)

{

if(abs(y-obj_player.y)<32) && (obj_player.y>=y)

move_towards_point(obj_player.x,y,5);

}

else

if(distance_to_point(xstart,ystart)>2)

move_towards_point(xstart,ystart,2);

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