Skocz do zawartości

Nie przełączające się akcje


Adriann

Rekomendowane odpowiedzi

Witajcie moje skarby, to znowu ja:3

Przychodzę dziś do was z kolejnym problemem wynikającym z mojej programistycznej ułomności.

 

Jak zapewne wiecie bijatykę chodzoną gdzie do wczoraj atak był

reprezentowany przez dodatkowy obiekt co sprawiało masę problemów i dziś wymieniłem to na kolizję liniową. Przy owej wymianie postanowiłem przepisać również kod na obronę, obrywanie itp bo nie działał do końca tak jak planowałem iiii w zasadzie to nie działa prawie wcale, niespecjalnie rozumiem dlaczego, wszystko teoretycznie powinno grać, kod wygląda następująco(wszystko w jednym skrypcie):

GML
argument0//przeciwnik

kolizja:

GML
if argument0.draw_atk=1 {

if collision_line((argument0.phy_position_x+20*argument0.image_yscale),argument0.phy_position_y,(argument0.phy_position_x+65*argument0.image_yscale),argument0.phy_position_y,id,false,false)

{sword_coll=1}}

else

sword_coll=0;

Zmienne w grze mówią że to działa doskonale

Problem pojawia się w samych zmianach:

 

 

GML
dd//zmienna dodatkowa;

deff// tu mają przełączać się akcje;

garda//od tego uzależnionyy jest typ ataku;

akcja//jaki atak wykonuje;

Poz//odgrywana animacja;

blok//zmienna pomocnicza do Poz, 0 zwykly atak,1odbicie od obrony, 2 jednoczesny atak

kl// zmiennik dla image_index, w niektórych wariantach kodu poniżej blokował się na wartosci 0.4

 

 

GML
if dd=0 && sword_coll=1//////////////////////////////////////////////////////////

{

if garda!=argument0.akcja

{deff='hurt'

dd=2

}

else

if garda=argument0.akcja && akcja=0

{deff='obrona'

dd=1

}

else

if akcja=argument0.akcja && akcja!=0

{deff='clash'

d=2

}

}

 

 

if dd=1 {kl=argument0.kl}

if dd=2 {kl+=0.4}

 

 

if deff='obrona'{/////OBRONA

argument0.blok=1;// odbicie u przeciwnika

if argument0.garda=1 Poz='def1'

if argument0.garda=2 Poz='def2';

if argument0.garda=3 Poz='def3';

}//////////////////////////

 

 

 

if deff='clash'///////CLASH

{

if argument0.x>x && blok=0 phy_speed_x=-(h/5);//odskakuje od gracza

if argument0.x<x && blok=0 phy_speed_x=(h/5);

blok=2;

 

 

if kl>=19

{deff=0

dd=0

}}/////////////////////////

if deff='hurt'////////HURT

{

if argument0.akcja=1 Poz='hurt_garda1';

if argument0.akcja=2 Poz='hurt_garda2';

if argument0.akcja=3 Poz='hurt_garda3';

 

if argument0.x>x phy_speed_x=-(h/2);//odskakuje od gracza

if argument0.x<x phy_speed_x=(h/2);

 

if kl>=19

{deff=0

dd=0

 

}

}

 

Docelowo akcje powinny się zerować po odegraniu ganimacji na image_index=kl

 

Mam nadzieję że w miarę jasno wyjaśniłem ten bałagan:o

 

b7b87863bb2440d0f0247af8c933f23b.jpeg

Odnośnik do komentarza
Udostępnij na innych stronach

Jedyne co widzę to to:

GML
if dd=0 && sword_coll=1//////////////////////////////////////////////////////////

{

if garda!=argument0.akcja //AKCJA A

{deff='hurt'

dd=2

}

else

if garda=argument0.akcja && akcja=0 //AKCJA B

{deff='obrona'

dd=1

}

else

if akcja=argument0.akcja && akcja!=0 //AKCJA C

{deff='clash'

d=2

}

}

 

Opcja A i Opcja B tylko moga sie wykonac bo garda albo jest albo nie jest rowna, wiec zatrzyma sie na ktores z nich.

 

Powinno być:

if C

else if A

else if B

Odnośnik do komentarza
Udostępnij na innych stronach

Cóż, jeżeli to jedyne miejsce w którym ustawiasz obronę, to musi dochodzić do niepoprawnej zmiany jednego lub obu warunków (dd i sword_coll)

Dopisz wewnątrz ifa show_debug_message("True"); I odpal z poziomu GMa gre i zobacz czy w compile logu spamuje "True" kiedy nie powinno być kolizji. Jeżeli tak, to masz źle kolizję jednak zrobioną.

Odnośnik do komentarza
Udostępnij na innych stronach

Udało się jakoś rozwiązać(obrona nie zerowała się na koniec) ale mam kolejny poważny problem!

Troszkę mi głupio że tak was ostatnio męczę ale sprawa jest bardzo pilna:<

 

Mam dwa skrypty, w jednym mamy akcje gracza a w drugim przeciwnika, każdy z nich ma taki sam kod na kolizje:

 

GML
argument0 to przeciwnik, a dokładniej dla wrogów gracz_PARENT a gracza enemy_PARENT

draw_atk to moment kiedy obiekt rysuje linię ataku

sword_coll kolizje z mieczem

 

GML
if argument0.draw_atk=1 {

if collision_line((argument0.phy_position_x+20*argument0.image_yscale),argument0.phy_position_y,(argument0.phy_position_x+65*argument0.image_yscale),argument0.phy_position_y,id,false,false)

{sword_coll=1}}

else

sword_coll=0;

 

Same kolizje działają wybornie ale problem pojawia się kiedy wstawiam kilku przeciwników, wtedy gracz reaguje tylko na jednego z nich i nie wiem jak przypisać tą rysowaną linię do pojedynczych obiektów wrogów.Tzn wiem że trzeba przypisać linię do id wroga ale nie potrafię tego zrobić:<

 

HALP PLS

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

W sensie z gracza chcesz sprawdzać czy koliduje z każdym z przeciwników po kolei? Easy:

 

GML
with enemy_PARENT {

// teraz other. == gracz_PARENT

// teraz self., id == przetwarzany obecnie enemy_PARENT

}

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