Skocz do zawartości
  • Ogłoszenia

    • Uzjel

      Nowa wersja forum   05.08.2017

      Pewnie widać, że wprowadziliśmy nową wersję forum. Skok z wersji 2 do 4 był dosyć trudny i musimy tu trochę posprzątać. Dajcie nam trochę czasu ~Administracja
    • Uzjel

      GMClan wrócił!   12.08.2017

      GMClan.org już działa, więc jeżeli ktoś wchodził przez adres forum.gmclan.org to może już wrócić do starych zwyczajów. Jeżeli strona wam się nie wyświetla to wyczyście cache i ciasteczka.
  • 0
Estremo_PL

Skaczący przeciwnik

Pytanie

Estremo_PL    0

Przeciwnik ma za zadanie stać w miejscu i skakać i na początku wszystko działa ale po około 20 sekundach przestaje skakać i stoi w miejscu (animacja wciąż trwa).

 

kod wygląda tak

[Create]

skok = choose(1,2,3);

if skok = 1 then image_index = 0;

if skok = 2 then image_index = 1;

if skok = 3 then image_index = 2;

image_speed = 0.05;

friction = 0.28;

 

[step]

if image_index = 1 then vspeed = -12;

 

if place_meeting(x,y-3,object1)

{

effect_create_below(ef_explosion,x,y,2,c_black)

instance_destroy()

with(object1) vspeed = -7;

}

 

oraz w Step jest użyte 5 klocków które chętnie bym przeniósł do kodu (pochodzą z pewnego poradnika)

Start of a block

set the vertical speed 0.6 relative

check collission x = 0 y = vspeed, only solid, relative

set the vertical speed 0

End of a block

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
I am Lord    2

zobacz czy zadziała if round(image_index) = 1

albo nawet chyba lepiej będzie tak:

if ( image_index > 1-image_speed && image_index <= 1+image_speed )

 

Start of a block

set the vertical speed 0.6 relative

check collission x = 0 y = vspeed, only solid, relative

set the vertical speed 0

End of a block

 

Prawdopodobnie to będzie coś takiego ale nie dam głowy uciąć bo z klocków korzystałem 15 lat temu :P

GML
vspeed += 0.6;

if ( place_free(x, y+vspeed) )

{

vspeed = 0;

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Estremo_PL    0
zobacz czy zadziała if round(image_index) = 1

albo nawet chyba lepiej będzie tak:

if ( image_index > 1-image_speed && image_index <= 1+image_speed )

 

 

 

Prawdopodobnie to będzie coś takiego ale nie dam głowy uciąć bo z klocków korzystałem 15 lat temu :P

GMLvspeed += 0.6;

if ( place_free(x, y+vspeed) )

{

vspeed = 0;

}

 

niestety nie działa to ale te klocki dają grawitacje, (zwykła coś mi dziwnie działa ale jeszcze popróbuję może się uda) a bardziej mi chodzi o to czemu po chwili przeciwnik przestaje skakać

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
I am Lord    2

Nie zadziałało to co napisałem wyżej?

 

tak to miało wyglądać:

GML
if ( round(image_index) = 1 ) then vspeed = -12;

if place_meeting(x,y-3,object1)

{

effect_create_below(ef_explosion,x,y,2,c_black)

instance_destroy()

with(object1) vspeed = -7;

}

 

albo tak:

 

GML
if ( image_index > 1-image_speed && image_index <= 1+image_speed ) then vspeed = -12;

if place_meeting(x,y-3,object1)

{

effect_create_below(ef_explosion,x,y,2,c_black)

instance_destroy()

with(object1) vspeed = -7;

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Estremo_PL    0
Nie zadziałało to co napisałem wyżej?

 

tak to miało wyglądać:

GMLif ( round(image_index) = 1 ) then vspeed = -12;

if place_meeting(x,y-3,object1)

{

effect_create_below(ef_explosion,x,y,2,c_black)

instance_destroy()

with(object1) vspeed = -7;

}

 

albo tak:

 

GMLif ( image_index > 1-image_speed && image_index <= 1+image_speed ) then vspeed = -12;

if place_meeting(x,y-3,object1)

{

effect_create_below(ef_explosion,x,y,2,c_black)

instance_destroy()

with(object1) vspeed = -7;

}

 

zadziałało to

 

GML
if ( image_index > 1-image_speed && image_index <= 1+image_speed ) then vspeed = -12;

if place_meeting(x,y-3,object1)

{

effect_create_below(ef_explosion,x,y,2,c_black)

instance_destroy()

with(object1) vspeed = -7;

}

 

mógłbyś mi teraz wytłumaczyć dokładnie działanie tej linijki if ( image_index > 1-image_speed && image_index <= 1+image_speed ) then vspeed = -12; i czemu moja wersja po chwili się psuła, i czy chcesz aby cię umieścić w twórcach w przedziale ,,podziękowania dla"?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
I am Lord    2

Psuło się bo image_index zaczęło przyjmować wartości zmienno-przecinkowe ze względu na zmianę image_speed

W pewnym momencie image_index zaczęło przeskakiwać przez wartość image_index == 1 z twojego warunku. No więc trzeba było rozszerzyć to tak by nie sprawdzał konkretnej liczby a zamiast tego zakres.

Zakres od image_index-image_speed do image_index+image_speed; Wtedy jest pewność że warunek się spełni i nie przeskoczy przez twoją żądaną jedynkę.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×