Skocz do zawartości

Aliens-reaktywacja


baca

Rekomendowane odpowiedzi

Ja tworze moją pierwszą grę nie jestem programistą, zaczełem tworzyć w GM 2 tygodnie temu.

zrobiłem przeciwników "obcych" i są problemy zabije jednego z tego samego gatunku to wszyscy z tego gatunku giną. jest jeszcze drugi problem jak dotkną ściany to niemogą iść za mną tylko stoją w miejscu.

Odnośnik do komentarza
Udostępnij na innych stronach

1. Zamiast adresować zmienne ogólnie do np. obcy.cośtam, zapisz je w samych obiektach obcych i użyj self.cośtam, wtedy efekt/zmienna będzie się tyczyła jednego konkretnego obcego w którym aktualnie dzieje się akcja, a nie wszystkich obiektów o nazwie "obcy" :P

 

2. Zwiększ maksymalną odległość od ściany dla obcego :D

Odnośnik do komentarza
Udostępnij na innych stronach

maska terz nie działa

 

 

// CREATE
xx = x;
yy = y;
entered = true;
move_speed = 2;
image_single=0;
image_speed=0;

max_hlto = 50; // maximum zycia
hlto = 50; // zycie ustawione na maximum
imie = 'X-obcy Mlody'; // imie potwora
atak = false; 
podazaj = false;  // czy ma podążać za graczem czy nie
k=stoj;         // kierunek w ktorym ma isc
dyst=50*50;        // dystans przy jakim  zaczyna gonić gracza

alarm[0] = room_speed*2;
alarm[1] = room_speed*random(2);



//STEP
if hlto <= 0
{
    with(self) instance_destroy();
    bohater.score=bohater.score+50 //Gdy kosmita zginie dostajesz 50 Pkt.
    bohater.zabitychW=bohater.zabitychW+1//Gdy kosmita zginie w statystykach masz o jedenego zabitego więcej.
    exit;
}
[/quote]

 

ja mam coś takiego umieszczone w kodzie obcego i jak zabije jednego to giną terz inni.

Odnośnik do komentarza
Udostępnij na innych stronach

if hlto <= 0

{

instance_destroy();

score+=50 //Gdy kosmita zginie dostajesz 50 Pkt.

bohater.zabitychW+=1 //Gdy kosmita zginie w statystykach masz o jedenego zabitego więcej.

exit;

}

 

"with(self)" wcale nie jest potrzebne :P

a te "score" to jest już wbudowany warunek w GM'ie :)

 

U mnie dodałem kodzik i wszystko cacy. pokarz kod jeśli obcy dotknie naboju i gdy nabój dotknie obcego (Jeśli tak masz :P )

Odnośnik do komentarza
Udostępnij na innych stronach

No bo self działa tylko wtedy jak jest bez with, ponieważ with pobiera id obiektu w nawiasie i wykonuje akcje do wszystkich obiektów o takim id. To tak samo jakbyś napisał with(all) { self.lol += 200 } to też zadziała do wszystkich obiektów, ponieważ najpierw zadresowałeś akcję do all, a później dałeś self, więc akcja dzieje dla all, jakby all to było self :3

 

A self to jest zmienna ogólna globalna wewnętrzna o stałej "rozciągłości" i nie może być definiowana ani jako globalna ani lokalna. W Waszych funkcjach, jest też niepotrzebne exit na końcu, ponieważ instance_destroy() dzieje się tylko raz i nie jest funkcją pernamentną, nie ma tej stałej "rozciągłości" :]

Odnośnik do komentarza
Udostępnij na innych stronach

step

if hlto <= 0
{
    instance_destroy();
    bohater.score=bohater.score+50 //Gdy kosmita zginie dostajesz 50 Pkt.
    bohater.zabitychW=bohater.zabitychW+1//Gdy kosmita zginie w statystykach masz o jedenego zabitego więcej.
    exit;
}

if atak && bohater.atak_npc != id
atak = false;



var gracz;
gracz=instance_nearest(x,y,bohater);

if ( distance_to_object(gracz)<dyst )
{
podazaj=true;
}
else
{
podazaj=false;
}


if (podazaj==true)
{

    if (gracz.y>y+63)
    {
     if (place_free(x,y+32))
     k=dol;
     else
     {
        if (gracz.x>x)
        k=prawo;
        else
        k=lewo;
     }
    }
    if (gracz.y<y-63)
    {
     if (place_free(x,y-32))
     k=gora;
     else
     {
        if (gracz.x>x)
        k=prawo;
        else
        k=lewo;
     }
    }
    if (gracz.x>x+63)
    {
     if (place_free(x+32,y))
     k=prawo;
     else
     {
        if (gracz.y>y)
        k=dol;
        else
        k=gora;
     }
    }
    if (gracz.x<x-63)
    {
     if (place_free(x-32,y))
     k=lewo;
     else
     {
        if (gracz.y>y)
        k=dol;
        else
        k=gora;
     }
    }
}


switch (k)
{
    case gora:
    if entered 
    {
        yy -= 32;
        entered = false;
        sprite_index=spr_upo;
        image_single=-1;
        image_speed=0.3;
        k=stoj;
    }
    break;
    
    case dol:
    if entered 
    {
        yy += 32;
        entered = false;
        sprite_index=spr_downo;
        image_single=-1;
        image_speed=0.3;
        k=stoj;
    }
    break;
    
    case lewo:
    if entered 
    {
        xx -= 32;
        entered = false;
        sprite_index=spr_lefto;
        image_single=-1;
        image_speed=0.3;
        k=stoj;
    }
    break;
    
    case prawo:
    if entered 
    {
        xx += 32;
        entered = false;
        sprite_index=spr_righto;
        image_single=-1;
        image_speed=0.3;
        k=stoj;
    }
    break;

}

if place_free(xx,yy)
{
    if mp_linear_step(xx,yy,move_speed,false)
    {
        entered = true;
        if (k=stoj)
        {
            image_single=0;
            image_speed=0;
        }
    }
}
else
{
    xx=x;
    yy=y;
}

 

create

xx = x;
yy = y;
entered = true;
move_speed = 2;
image_single=0;
image_speed=0;

max_hlto = 50; // maximum zycia
hlto = 50; // zycie ustawione na maximum
imie = 'X-obcy Mlody'; // imie potwora
atak = false; 
podazaj = false;  // czy ma podążać za graczem czy nie
k=stoj;         // kierunek w ktorym ma isc
dyst=50*50;        // dystans przy jakim  zaczyna gonić gracza

alarm[1] = room_speed*random(2);

 

alarm1

var kierunek;
if !podazaj
{
    kierunek = choose(lewo,prawo,gora,dol);
    switch kierunek
    {
    case gora: krok_dogora(); break;
    case dol: krok_wdol(); break;
    case lewo: krok_wlewo(); break;
    case prawo: krok_wprawo(); break;
    }
}
alarm[1] = room_speed*random(2);

script

 //krok w lewo
   if entered 
    {
        xx -= 32;
        entered = false;
        sprite_index=spr_lefto;
        image_single=-1;
        image_speed=0.3;
        k=stoj;
    }
    
i tak do karzdego kierunku

:P

Odnośnik do komentarza
Udostępnij na innych stronach

A wiesz co ja ci-ci po-powiem ?? (:P) To jest kodzik z przykładu bodajże "System walki ala Tibia"... Tak ? Zgadłem :D I ten kodzik ma właśnie tą jedną wadę, że działa TYLKO wtedy, kiedy WSZYSTKIE obiekty na planszy są wyrównane do siatki o rozmiarach 32:32... I mają takie same rozmiary. A ażeby zlikwidować ten perfidny błąd, zamień

if mp_linear_step(xx,yy,move_speed,false)
    {
        entered = true;
        if (k=stoj)
        {
            image_single=0;
            image_speed=0;
        }
    }

na:

if mp_potential_step(xx,yy,move_speed,true)
    {
        mp_potential_settings(180,10,4,true);
        entered = true;
        if (k=stoj)
        {
            speed=0;
            image_single=0;
            image_speed=0;
        }
    }

 

I musi być dobrze :D To po prostu bardziej zaawansowane motion planning ^^.

 

Tak na marginesie dodam, że ten kod z tego przykładu ma dużo więcej pomniejszych błędów i całą masę niepotrzebnego kodu xD Jest dość przestarzały po prostu :P Dałoby się go zrobic duuużo krócej... Nie krytykując autorów oczywiście xP

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