Skocz do zawartości

Odbijanie i chwilowy godmode


Jake

Rekomendowane odpowiedzi

Hej,

 

Mam problem, nie bardzo wiem jak napisać takie coś: Kolizja playera z enemy. Player odskakuje w bok i zmienia się spirte na migający i przez chwilę jest ustawiony godmode. Każdy to zna z gier platformowych. Mój kod wygląda tak:

STEP Playera:

GML
if keyboard_check(ord('D'))

{

if place_free(x+5,y)

{

x+=5;

sprite_index=sprright

dir=0;

if place_meeting(x,y,enemy)

{

x-=50; // Odskok

}

}

}

 

Odskok jakby działa, ale mimo wszystko przesuwa playera o 50 pikseli, da się to zrobić jakoś płynnie? Coś na zasadzie bounce? I przy okazji zapytam dlaczego nie działa następujący kod:

 

GML
if ! place_free(x+0,y+1)

{

if place_meeting(x,y,enemy)

{

y-=50;

 

}

vspeed=-10

}

 

Tu akurat chodzi o to żeby player skacząc od góry na enemy nie wpadał do jego środka a odbił się na zasadzie kodu powyżej. Niestety dalej wpada. Z góry dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

move_towards_point(x,y,sp) - ruch obiektu do określonej pozycji (x,y) sp określa prędkość podążania.

 

Co do drugiego:

GML
if ! place_free(x+0,y+1)

{

if place_meeting(x,y,enemy)

{

y-=50;

 

}

vspeed=-10

}

Nie jestem pewien czy po If nie powinieneś czasem dać nawiasów (wg. dokumentacji tak)

Chyba przy funkcji powinien być wykrzyknik (tzn. podejrzewam, że ogólnie w tym nawiasie do place_free)

 

Ogólnie wiesz, że wartości x,y; to piksele, a nie kratki?

 

Trochę chyba namodziłeś z tym drugim kodem

 

Nie prościej zrobić Event "Collision" z Enemy, który by robił

GML
y=y-50;

 

A w create (bo pierwszy if to chyba robi)

GML
vspeed=-10

 

Fervi

Odnośnik do komentarza
Udostępnij na innych stronach

Nie bardzo rozumiem do czego ma mi się przydać move towards point? Jakie nawiasy? Chodzi o składnie? Co do kolizji to może masz rację, spróbuję po prostu w event dać:

GML
x=xprevious

y=yprevious

 

No ale mniejsza, mógłby mi ktoś pomóc z tym cool down time po kolizji z enemy? Jak opisałem wyżej, chwilowy god mode i migotanie sprite.

Odnośnik do komentarza
Udostępnij na innych stronach

wszystko fajnie tylko wiecie że to będzie za każdym razem go odpychać kiedy wejdzie w kontakt z wrogiem to po 1, po 2 odepchnie go praktycznie tylko około 1 punkt (zależy od speeda w move toward point) od wroga a zrozumiałem ze chce takie typowe odepchnięcie na dłuższą odległość

 

 

więc pokolei

ja to bym zrobił tak :

 

GML (create)
throw=0

god=0

 

GML (step)
if god=1

{

god=2

alarm[0]=czas ile sekund ma trfać

alarm[1]=jak długo ma lecieć do tyłu

}

else if god=2

{

a tu kod na efekty cool dawn np alpha, kolor, muzyczka, itp

}

 

if throw=0

{

kod na ruchu Playera

}

else if throw!=0

{

ten sam kod jak do skoku z klawiatury

if throw=1

{

if place_free(x+ilość przesuwanych punktów,y)

x+= ilość przesuwanych //np 2 czy 3 raczej na pewno nie 50 :p

}

else if throw=2

{

if place_free(x-ilość przesuwanych punktów,y)

x-= ilość przesuwanych //np 2 czy 3 raczej na pewno nie 50 :p

}}

 

GML (alarm0)
god=0

 

GML (alarm1)
throw=3

 

GML (collision enemy)
if vspeed>=0

{

if god mod=0

{

hp-=ileś tam

god=1

 

if x>other.x

throw=1

else

throw=2

}}

else

{

vspeed=-10

i co tam jeszcze chcesz :P

}

 

GML (collision floor)
if throw=3

throw=0

 

kod nie testowany, pisany z głowy więc pewnie zawiera masę błędów

no i z całą pewnością można go ulepszyć

 

chyba działa ale głowy za to urwać sobie nie dam :P

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