Skocz do zawartości

Skakanie po platforach


Shil

Rekomendowane odpowiedzi

Witam

Swoją przygodę z GM zaczęłam niedawno, korzystałam z gotowych skryptów i tutoriali, także tu.

I chciałam stworzyć grę, w której szynszyla skacze i zjada fistaszki.

Problem jest taki, że w zależności od planszy, szynszyla albo skacze z grawitcją, albo jest to rzut od gory i wtedy bez grawitacji - i zrobiłam kodem - działa. Ale szynszyla dziwnie skacze- tzn. moze rozpocząc skok jeszcze nie osiągnąwsy ziemi i czepia się platform - normalnie przykleja się uszami i lewituje...

 

Tu wstawiłam ten plik roboczy: http://shil.prv.pl/ccc.gmd

 

Niestety to chyba GM 5tka, bo karta graficzna nie pociągnie mi lepszej wersji.

Przyznam, że się zgubiłam - nie wiem czy to wina złego kodu na up na klawiaturze, czy grawitacji, czy collission z blokiem. Przed dodaniem warunków dla różnych plansz (by rozgraniczyć tę sytuację z grawitacją i bez) było lepiej, ale te objawy też były, tylko mniej widoczne.

 

Proszę o pomoc, może ktoś wie jak to rozwiązać?

Odnośnik do komentarza
Udostępnij na innych stronach

W platformówkach bez maski nie zajdziesz daleko. Dzięki nim robisz precyzyjne kolizje i Twój hero nie zacina się na klockach kawałkiem ucha czy inną częścią ciała. Poczytaj trochę o zastosowaniach masek. Poustawiaj origin spritów tak aby współrzędna x była po środku sprite'a. Ustawienie w lewym górnym rogu nie jest najlepszym pomysłem. Sprawia to kłopoty gdy zmieniasz sprity z hero_lewo na hero_prawo. Wtedy hero, za każdym razem jak się obraca, przesuwa się o jakiś x w lewo lub prawo. Dodatkowymi plusami ustawienia origina na środku jest to, że nie trzeba robić spritów na lewo i jednocześnie na prawo, wystarczy w jedną stronę i zabawa z image_xscale (chyba, że te sprity w dwie strony mają być z jakiś przyczyn). Nie musisz pisać wtedy

GML
if(place_free(x+4,y))

x+=17;

tylko

GML
if(place_free(x+4,y))

x+=4;

Łatwiej jest wtedy zapanować nad ruchem postaci.Co do skakania. Gravity jest co step zwiększane o wartość jaką podałaś. Zrób sobie nowy room i ustaw w nim samą szynszylę. W create szynszyli dopisz room_speed=3. Włącz F6, kliknij na zielony krzyżyk i wpisz object1.y. Zobaczysz jak się zmieniają współrzędne y. Musisz ten problem rozwiązać inaczej. Aby szynszyla skakała dopiero jak będzie na ziemi dodaj warunek do skoku:

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

//skok</span>

Mam nadzieję, że to Ci pomoże.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Jakoś nie chce mi się wierzyć, że Ci nie pójdą nowsze wersje niż GM5, ponieważ wymagają one raptem Directx 8, więc nawet na poczciwym dziadku geforce 2 mx pójdą (na allegro można kupić w oszałamiającej cenie 10zł). Przecież to są zamierzchłe czasy sprzed około 10 lat.

 

Ściągnij nową wersję, bo w GM5 już nikt nie tworzy, poza tym gry w nim zrobione nie pójdą na nowszych systemach niż Windows XP.

Odnośnik do komentarza
Udostępnij na innych stronach

Wow, ale odpowiedzi, dzięki:)

 

Rady super, zaraz to wypróbuję. Coprawda nic jeszcze nie wiem o maskach, ale to kwestia czasu. :twisted:

 

Ten room_speed to po to by pokoj wędrował za obiektem? Próbowalam zrobić taki myk w panelu roooms, ale to się działy bardzo ciekawe rzeczy.

Komputer ma 13 lat, chyba nie będę z nim eksperymentować narazie. :) Obawiam się, że nie jest to kwestia directxa.

 

--

 

Więc tak: room_speed to prędkość wyświetlania klatek w pokoju? Bo mi wszystko mega zwolniło...

Szyl nie chce nałożyć na siebie maski - tzn. nałożyłam na obiekt szynszylę, obiekt klocka - to sprawiło, że szynszyla znalazła się pod klockiem i odmówiła współpracy. W drugą stronę też nie pomogło.

 

Zarzuciłam kod:

GML
if room=room0 {

 

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

 

{

 

vspeed = -10;

 

}

 

 

 

}

 

else

 

if(place_free(x,y+1))

 

{y-=7}

 

I jest dobrze - szyl skacze płynnie i nie zaczepia tak strasznie. Ale jeszcze pokombinuję z maską.

Odnośnik do komentarza
Udostępnij na innych stronach

Wiem, że się czepiam, ale jak na 13 letniego kompa, to nieźle sobie radzi z vistą i uruchamianiem gier gm5 pod tym systemem.

 

Też mnie to czasem dziwi. Ale większość gier już na nim nie chodzi, w Photoshopie nie mogę pracować na obrazkach powyżej 2000 na 2000px, a raz nawet podjęłam w swej naiwności próbę wyrenderowania czegoś w blenderze 3d :P

Ale GM 5tka, to chodzi jak marzenie :) A umiejętności mogę ćwiczyć jak na każdym innym, nie?

 

Jak to z tą maską zrobić? Po co to właściwie jest? Szukałam na forum takiego tematu, ale są tylko wspomniane te maski. To coś jak ustawianie krycia przez różne elementy? Niestety jak próbuję maskować szynszyla blokiem od platformy, to przemieszcza mu się środek ciężkości i tonie w platformie. Rzeczywiście, nie czepia się już wtedy, a przynajmniej ciężko to zaobserwować.

 

Czy do tej maski trzeba stworzyć osobnego sprite'a?

Odnośnik do komentarza
Udostępnij na innych stronach

Aby zrobić maskę tworzysz oddzielny sprite o tych samych wymiarach i originach co sprite herosa. Następnie rysujesz jakikolwiek kształt. Ustawiasz w obiekcie maskę. Masz taką rozwijaną listę "Mask" w lewej części okienka i wybierasz sprite'a, który ma być maską. Teraz maska będzie odpowiadać za kolizje, a nie aktualny sprite herosa. Oczywiście, najlepiej jest zrobić maskę o kształcie prostokąta.

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