Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

  • 3 tygodnie później...

Szybkie pytanie:

Jak zrobić zapętlanie backgrounda?

rysuję sobie za pomocą:

draw_background(statyczne1,view_xview[0]/1.4,view_yview[0]1/3)

i chcę żeby, gdy tło zacznie "wyjeżdżać" z view'a, "rysowało" obok kolejnego i tak w kółko z każdej strony.

Dość pokracznie to wytłumaczyłem, ale sądzę że i bez tego tłumaczenia wiecie co mam namyśli :)

Odnośnik do komentarza
Udostępnij na innych stronach

Banalnie prosta kwestia ale ni huhu nie chce mi wyjść.Prosta strzelanka z widokiem który możnaby określić jako trochę top down-trochę zza pleców

Czyli coś jak tutaj High%20Noon-2.png

 

I teraz problem z kolizjami.Chcę żeby wejście w przeszkodę typu kamień,kaktus itd oznaczało zablokowanie w określonym momencie,tak żeby obiekt stał się wielowymiarowy- czyli idąc od góry blokuje mnie kiedy zasłoni postać,idąc w niego od dołu blokuje w momencie kiedy postać przykryje go.

5e66d1c9b9899.png

 

Bez problemu ogarnąłem motyw zakrywania poprzez manipulację image_alpha- ale sama kolizja nadal jest problemem

 

Próbowałem wielu wariantów, aktualnie grzebię w czymś w stylu

 

STEP obj_player

GML
obs=instance_nearest(x,y,obj_stone)

 

if (distance_to_object(obs)<15)&& (y<obs.y)&&(obj_player.sprite_index=spr_player_walk_UP) {

vspeed=0}

 

if (distance_to_object(obs)<15)&& (y>obs.y)&&(obj_player.sprite_index=spr_player_walk_DN) {

vspeed=0}

 

I niby działa ale co chwilę jakieś błędy wychodzą,na ogół blokuje się całkowicie nie ważne w którą stronę idę.Próbowałem kombinować z maską sprite przeszkody albo użyć solid, niewiele to dało.

Jak Wy byście to zrobili?

Odnośnik do komentarza
Udostępnij na innych stronach

Bardzo proste. Otwórz swój sprite i znajdź przycisk "Modify Mask". Zaznacz "Manual" i albo narysuj ją obok na sprite, albo wpisz odpowiednie numerki.

Ustawiasz tu tak punk kolizji. Nie chcesz aby kolidowała góra kaktusa a sama część przy ziemi. To samo zrób dla postaci i innych obiektów. ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Tą opcję przerabiałem jako pierwszą bo wydaje się najbardziej sensowna.Ale kiedy postać idzie z góry to kolizja ma być na dolnej części kaktusa,ale kiedy idę od dołu to kolizja ma być z górną częścią-do tego jeszcze potrzebna kolizja (a raczej jej brak) kiedy mijam kaktusa idąc w bok i albo go zasłaniam jak jestem niżej albo on mnie jak jestem wyżej.Spróbuję jeszcze raz, ale kilka godzin bawiłem się maskami sprite i nic z tego nie wyszło

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Był taki przykład kiedyś do GM5-8 dołączany. Robisz sobie sprite kaktusa, dajmy na to 32x64 piksele. Robisz drugi sprite, też 32x64 piksele, ale zamolowujesz tylko 4x64 od dołu. Obu dajesz origin na 16/64 Tworzysz obiekt, ustawiasz sprite jako ten pierwszy, a mask jako ten drugi. W kodzie (step/draw) dajesz "depth = -y" i to samo w bohaterze (kod i maska, ważne też aby origin sprite'a postaci na osi Y też był ustawiony na sam dół sprite'a).

 

W tym momencie wszystko powinno działać jak należy.

Odnośnik do komentarza
Udostępnij na innych stronach

Wiem jak Ci pomóc. Wyobraź sobie że każdy obiekt rzuca pod siebie cień. Jeżeli obiekt stoi na ziemi to cień jest tam gdzie nogi. Jeżeli to lecący pocisk to cień jest niżej symulując że obiekt jest w powietrzu.

Teraz zwyczajnie sprawdzaj kolizje pomiędzy cieniami. Niczym innym.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Dokładnie, pocisk jak będzie miał sprite 4x4, to będzie mieć origin na 2,64 i maskę jako sprite 4x4 z originem 2,2. I wtedy będzie jak trzeba :)

 

Do testowania gry proponuję w draw każdego obiektu dać:

 

draw_self();

draw_sprite_ext(mask_index, 0, x, y, image_xscale, image_yscale, image_angle, image_blend, 1);

Odnośnik do komentarza
Udostępnij na innych stronach

Ale gnysek, czy jest sens tworzyć nowe sprite dla masek? Przy rysowaniu takim jak teraz podałeś (do debugowania) to to pomaga, ale przecież wystarczy dla oryginalnych grafik ustalić ręcznie maskę.

Odnośnik do komentarza
Udostępnij na innych stronach

Takie coś to jest standard w obliczaniu GMowych 3D kolizji. Najpierw robimy kolizję 2D w top down i potem sprawdzamy między tymi kolizjami dodatkowe wcześniej ustalone zmienne pozycji ( z ) na której są instancje i ich wysokości ( h ).

Izometria, 3D, aksonometria, dimetria nie ma znaczenia tak samo się postępuje.

Odnośnik do komentarza
Udostępnij na innych stronach

Threef@

Dzięki za pomoc z tamtym i sorry że dopiero teraz.

 

Mam jeszcze taki problem.

Robię paralaksę w taki sposób:

GML
draw_background(tlo,view_xview[0]/12,view_yview[0]/10)

Wszystko niby działa, niby fajnie, ale za cholere nie mogę dojść przez jak dobrać liczby do dzielenia żeby "oddalić" tło (tzn żeby przesuwało się wolno). Duża liczba nie załatwia sprawy.

Ktoś ma jakiś pomysł?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Ale gnysek, czy jest sens tworzyć nowe sprite dla masek? Przy rysowaniu takim jak teraz podałeś (do debugowania) to to pomaga, ale przecież wystarczy dla oryginalnych grafik ustalić ręcznie maskę.

 

Można, ale moim sposobem jest szybciej, bo nie trzeba edytowac za każdym razem masek.

Odnośnik do komentarza
Udostępnij na innych stronach

Można, ale moim sposobem jest szybciej, bo nie trzeba edytowac za każdym razem masek.

Jeżeli większość obiektów ma ten sam rozmiar maski to wtedy jest szybciej. Tu się zgodzę bo wystarczy wtedy ustawić ją o obiekcie.

 

A jeżeli chodzi o przykład z maskami to chyba był nawet mój.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem czy to abstrakcyjny bug GM czy coś przypadkiem robię źlę, ale zaraz oszaleje przez to

 

 

Mam tło które ma się przesuwać symulując przez to ruch w górę (jak przy jakiejś strzelance z somolotem top-down).Najprostsza rzecz na świecie, w room_setings ,background ustawiam vert.speed na np.3 . Wszystko działa idealnie.

 

I teraz uwaga,najlepsze.

 

Zmieniam grafikę tego backgrounda (na inną lub w jakikolwiek sposób edytuje)-NIC innego nie zmieniam,żadnych ustawień- i co się dzieję? Background przestaje się powtarzać.Przelatuje jeden raz a potem puste tło, nie ważne co bym nie ustawiał- zawsze to samo-background przestaje się zapętlać jeżyli ruszę jego edycję.

 

Co więcej- tyczy się to danego roomu-nie całej gry.Tworzę nowy pokój,wstawiam te same obiekty,edytowany backgoround- i śmiga- ale poprzedni pokój zostaje przeklęty po wsze czasy...

 

Miał ktoś coś podobnego?

Odnośnik do komentarza
Udostępnij na innych stronach

Cóż, zważająć, że gra HTML5 odpala się w przeglądarce może być wiele problemów:

 

-Urządzenie

-Przeglądarka

-Kodowanie gry (Niektóre fukcje nie sa dostępne w HTML5 w ogóle lub są niedostępne dla konkretnej serii urządzeń / przeglądarek)

-GMS sam w sobie

 

Potrzeba więcej informacji aby coś zdziałać tutaj.

 

Edit: Ale mogę już zarzucić teorią wstępną:

Jeżeli używasz shaderów w grze / nie wyłączyłeś application_surface, przeglądarki/urządzenia bez odpowiedniego wsparcia dla WebGL mogą nie renderować gry. Sprawdź też czy nie ma czegoś apropo tego wsparcia w global game settings w zakłdace HTML5

Odnośnik do komentarza
Udostępnij na innych stronach

Gra nie używa shaderów. Application surface właśnie wyłączyłem w creation code roomu i dalej nic. Grę odpalam na Windowsie 10 z najnowszym Google Chrome, więc WebGL jest (nawet test zrobiłem przed chwilą). Z funkcji to używam na razie najbardziej podstawowych instance_* effect_* window_* (do skalowania canvas, kod z wpisu YoYo na ich tech blogu) ds_grid_* nic jakiegoś rzadko używanego itd. .

Odnośnik do komentarza
Udostępnij na innych stronach

Dlatego jak piszesz coś na HTML5 to i musisz testować na HTML5, spróbuj jeszcze wyeksportować aplikację i umieścić na jakimś Tomcacie czy innym serwerku, może jakaś lokalna konfiguracja jest u Ciebie popsuta. Sprawdź czy eksport pustego rooma w tym projekcie zadziała.

Odnośnik do komentarza
Udostępnij na innych stronach

Witam, mam kilkanaście rodzajów blocków do gry platformowej wiem, że jeśli będe w obiekcie gracza ciągle dawać colision kilkanaście razy to oszaleję i gra wogle będzie się długo ładować, a jeśli bym to zrobił w stepie to było by o wiele szybciej. Czy jest jakiś kod na to?

Parent i children ,rodzic i dziecko W tym linku masz ładnie wytłumaczone

Odnośnik do komentarza
Udostępnij na innych stronach

Masz zacząć myśleć obiektowo. Jeżeli wszystkie bloki w twojej grze różnią się tylko grafiką albo rozmiarem to znaczy że dziedziczą po sobie jakieś właściwości. To oznacza że mogą mieć wspólnego rodzica (albo jeden z nich może być rodzicem). Później jeżeli będziesz sprawdzał cokolwiek dla rodzica GM będzie przy okazji sprawdzać jego dzieci.

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