Skocz do zawartości

Walljump


Fervi_

Rekomendowane odpowiedzi

Witajcie!

 

Prawdopodobnie zły dział, ale :P

 

Szukam prostego i typowo platformówkowego Wall Jumpa, a'la Super Meat Boy :P

Testowałem parę walljumpów z neta, ale dość dziwne są (takie nienaturalne jak na gry platformowe), a przykładu Pietera enigma nie rusza (sam LGM się kraszuje :P)

 

Jak ktoś ma taki przykład typowo-typowy, niech wrzuci :) ew. jakieś swoje teorie jak to napisać

 

Z góry dziękuję

Fervi

Odnośnik do komentarza
Udostępnij na innych stronach

xD xD xD xD xD xD xD xD xD xD xD xD xD xD xD

 

Jak mi powiesz jak powinien wyglądać Walljump (nie double jump przy ścianie) - to napiszę

 

Ale nie mam pomysłu, idei - jak ma wyglądać taki znany z gier Walljump

 

Fervi

Odnośnik do komentarza
Udostępnij na innych stronach

Przecież walljump od zwykłego skoku różni się tylko tym że odbijasz się od ściany zamiast podłogi. :o

 

Niby tak, chociaż chyba w zależności od siły "wbicia" następuje siła "odbicia" i chyba nie jest ona stała.

 

Chyba, że się mylę, nie wiem czy ktoś ogarniał te siły fizyki w grach :P

 

@Piotrek

Widziałem ten przykład, ale nie działa pod enigmą (podejrzewam uszkodzenie, bo plik GM8.1 ma tylko 6 kilobajtów [podczas gdy czysty plik gm81 stworzony w enigma ma 43]

 

Fervi

Odnośnik do komentarza
Udostępnij na innych stronach

@Piotrek

Widziałem ten przykład, ale nie działa pod enigmą (podejrzewam uszkodzenie, bo plik GM8.1 ma tylko 6 kilobajtów [podczas gdy czysty plik gm81 stworzony w enigma ma 43]

przykład działa doskonale, a oto jego treść

GML (create gracza)
hsp = 0; // horizontal speed

vsp = 0; // vertical speed

grounded = 0; // is on ground

sliding = 0;

maxSlidingSpeed = 3;

slidingJumpSpeed = 8;

 

vgrav = 1; // verticalgravity

hgrav = 0.5; // horizontal gravity

fric = 1; // on ground friction

counterFricMultiplier = 3; // friction when oposit buttons are pressed

maxHorSpeed = 12; // max horizontal speed

jumpSpeed = 12; // jump speed (higher you set it, higher the player goes)</span></span></span></span></span>

GML (step gracza)
left_button = keyboard_check(ord('A'));

right_button = keyboard_check(ord('D'));

up_button = keyboard_check(vk_space);

 

vsp += vgrav;

if ( sliding == 1 ) {

if ( vsp > maxSlidingSpeed ) {

vsp = maxSlidingSpeed;

}

}

 

if ( left_button ) {

if ( hsp > 0 ) {

hsp -= hgrav * counterFricMultiplier;

} else {

hsp -= hgrav;

}

 

if ( hsp < -maxHorSpeed ) hsp = -maxHorSpeed;

}

 

if ( right_button ) {

if ( hsp < 0 ) {

hsp += hgrav * counterFricMultiplier;

} else {

hsp += hgrav;

}

 

if ( hsp > maxHorSpeed ) hsp = maxHorSpeed;

}

 

if ( up_button ) {

if ( grounded == 1 ) vsp = -jumpSpeed;

if ( sliding == 1 ) {

if ( place_meeting(x+1, y, obj_block) ) {

hsp -= slidingJumpSpeed;

}

if ( place_meeting(x-1, y, obj_block) ) {

hsp += slidingJumpSpeed;

}

}

}

 

if ( !right_button && !left_button ) {

if ( grounded == 1 ) {

if ( hsp < 0 ) {

if ( hsp < fric ) {

hsp += fric;

} else {

hsp = 0;

}

}

if ( hsp > 0 ) {

if ( hsp > fric ) {

hsp -= fric;

} else {

hsp = 0;

}

}

}

}

 

// vertical collision

if ( place_meeting(x, y+vsp, obj_block) ) {

if ( vsp < 0 ) {

while ( !place_meeting(x, y-1, obj_block ) ) y -= 1;

vsp = 0;

grounded = 0;

} else {

while ( !place_meeting(x, y+1, obj_block ) ) y += 1;

vsp = 0;

grounded = 1;

}

} else {

grounded = 0;

}

 

// horizontal collision

if ( place_meeting(x+hsp, y, obj_block) ) {

while ( !place_meeting(x+sign(hsp), y, obj_block) ) x += sign( hsp );

hsp = 0;

}

 

// sliding

if ( place_meeting(x+1, y, obj_block) || place_meeting(x-1, y, obj_block) ) {

sliding = 1;

grounded = 1;

} else {

sliding = 0;

}

 

x += hsp;

y += vsp;

zrób sobie 2 obiekty i sprawdź

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