Skocz do zawartości

Inteligentni Wrogowie i Sprzymierzeńcy


Rekomendowane odpowiedzi

Siema chcę alby ktoś pomógł mi w :

-stworzeniu obiektu Niemca patrolującego las (chcę żeby chodził i zawracał o 180 stopni)

-gdy patrolujący Niemiec zobaczy Mnie w promieniu 200 pixeli rozpocznie pościg za mną i zacznie do mnie strzelać)

- żeby za każdym razem Niemiec zawracał kilka pikseli od końca ekranu (rooma)

-aby moi sprzymierzeńcy podążali w stronę obiekty Niemca i nieudolnie lub udolnie próbowali zabić Niemcą (on ich też)

-żeby i Niemcy i moi sprzymierzeńcy płynnie obracali się przy każdej zmianie kierunku :)

jeśli można prosił bym o jakiś przykład takiej inteligencji.

Za pomoc z góry dzięki i dam creditsy :D

 

Zły dział. I to już nie pierwszy raz.

Yoda

Odnośnik do komentarza
Udostępnij na innych stronach

1. If x >= ileśtam

{

direction = 0;

speed = 4;

}

else

{

if x <= ileśtam

{

direction = 180;

speed = 4;

}

}

2. If distance_to_object(obj_bohater) <= 200

{

point_direction(obj_boh.x,obj_boh.y)

speed = 4;

}

3. WTF?

4. Nie rozumiem

5. Też nie rozumiem

I dlaczego w Zaawansowanych.

Btw, dałem ci taki kod, bo nie podałeś rzutu.

Odnośnik do komentarza
Udostępnij na innych stronach

aby moi sprzymierzeńcy podążali w stronę obiekty Niemca i nieudolnie lub udolnie próbowali zabić Niemcą (on ich też)

 

Step obj_sprzymierzeniec

GML
cel=instance_nearest(x,y,obj_niemiec);

if (distance_to_object(x,y,cel)<=jakaś tam odległość)

{

alarm[1]="jakis tam czas";

}

Wstawiasz klocka Step Avoiding

x: cel.x

y: cel.y

speed: jakaś tam predlkość

 

Alarm1 obj_sprzymierzeniec

GML
czy_trafi=random(100); // prawdopodobieństwo trafienia

if (czy_trafi<50)

{

pudło();

}

alarm[1]=jakis tam czas;

else if (czy_trafi>=50)&&(czy_trafi<90)

{

celny_strzał();

cel.life=cel.life-round(random(jakiaś wartość życia));

alarm[1]=jakis tam czas;

}

else if (czy_trafi>=90)

{

head_shoot();

instance_destroy(cel);

}

Dla niemca podobnie

Nie testowałem ale powinno działać ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Harv: Potwierdza się moja teoria, że umiesz mniej niż w toalecie.

 

Co to ma być na pierwszym '-.- Wiesz, co ten kod zrobi?

 

W takiej formie, jak jest teraz będzie szedł w prawo do usra*** śmierci, jeśli byś zamiast ">" dał "<" to by drgał w miejscu <_<

 

Nie będzeimy ci pisać takiego kodu. Lepiej wyjaśnię kilka funkcji...

GML
direction = 7; //wartość od 0 do 360. Oznacza kąt bohatera. 0 jest w prawo - inne wartości sprawdź se sam :)

speed = 4; //prędkość bohatera. Ile pixeli na klatkę pokonuje... sprawdź se...

image_angle = 0; //kod odpowiada za ustawienie sprita. Wartości jak w direction

I to w sumie wszystko. Zmienne chyba znasz <_<

Odnośnik do komentarza
Udostępnij na innych stronach

  • 5 lat później...

Dołączam się do pytania, też mi to jest potrzebne, ale tylko skrypt strzelania do gracza, gdy jest w jakiejś odległości.

Ten if:

GML
if (distance_to_object(x,y,cel)<=100)

nie działa, więc nie mogę dalej robić, chociaż dalej to łatwo:

Istance create dla kamienia, pocisku (czy czegoś tam).

I lot pocisku w stronę gracza.

No więc proszę o tego naprawionego ifa, lub podpowiedź jak go zrobić.

-------------

Odkryłem w czym problem.

Dla dociekliwych powinno być:

GML
if distance_to_object(o_bohater)<=100

{

alarm[0]=5;

}

(Przynajmniej u mnie działa)

Odnośnik do komentarza
Udostępnij na innych stronach

jak masz pytanie, nowy kolego, to zrób nowego posta, bo nekrofilia to nieprzyjemny społecznie czyn ;)

Odnośnik do komentarza
Udostępnij na innych stronach

patrol mozesz zrobic trzeba tak

GML
Information about object: o_enemy

 

Sprite: sprite1

Solid: false

Visible: true

Depth: 0

Persistent: false

Parent: <no parent>

Mask: <same as sprite>

 

Create Event:

execute code:

 

// start

_x1=50;

_x2=50;

// end

_y1=100;

_y2=150;

// direction

_ruch=1;

// speed

_spd=3

 

 

Step Event:

execute code:

 

if (_ruch==0) {/*stoji na miesjscu, mozna dac jakis kod*/};

else if (_ruch==1) {

// ruch do x2,y2

x+=_spd*(x<_x2);

y+=_spd*(y<_y2);

//jesli dotarl do x2,y2 zmien kierunek ruchu do x1,y1

if ((x>=_x2) && (y>=_y2) ) {

_ruch=-_ruch;

};

}

else if (_ruch==-1) {

// ruch do x1,y1

x-=_spd*(x>_x1);

y-=_spd*(y>_y1);

//jesli dotarl do x1,y1 zmien kierunek ruchu do x2,y2

if ((x<=_x1) && (y<=_y1) ) {

_ruch=-_ruch;

};

};

fajne je to ze mozesz kierowac traso zmienajoc x1, y1 a x2, y2, lub zatrzymac niemca jak ma podejrzenie :D by sie mogl rozglodac( fajne by poszerzyl mu sie zasieg detekcji kdy stoji)

jesli instancja jest mimo droge patrolu to sama jodzie najkrotso traso na trase

 

jest maly minus jesli _spd jest napr 3, trasa na x1 x2 na 50 a instancja na 52 to w stepu instancja jest na 49 a nie 50.

jezeli to vazne bezdie trza poprawka :)

cos w stylu

GML
if (_ruch==0) {/*stoji na miesjscu, mozna dac jakis kod*/};

else if (_ruch==1) {

// ruch do x2,y2

x+=_spd*(x<_x2);

y+=_spd*(y<_y2);

//jesli dotarl do x2,y2 zmien kierunek ruchu do x1,y1

if ((x>=_x2) && (y>=_y2) ) {

_ruch=-_ruch;

x=_x2; // dokladnosc trasy na 1 pix

y=_y2;

};

}

else if (_ruch==-1) {

// ruch do x1,y1

x-=_spd*(x>_x1);

y-=_spd*(y>_y1);

//jesli dotarl do x1,y1 zmien kierunek ruchu do x2,y2

if ((x<=_x1) && (y<=_y1) ) {

_ruch=-_ruch;

x=_x1;

y=_y1;

};

};

ale mozliwosci jest duzo
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ę...