Skocz do zawartości

Rekomendowane odpowiedzi

  • 3 tygodnie później...
Opublikowano

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 :)

Opublikowano

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?

Opublikowano

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. ;)

Opublikowano

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

  • Administratorzy
Opublikowano

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.

Opublikowano

A co wtedy z kolizją z innymi obiektami?Ta gra będzie się opierała na strzelaniu , jak będzie wyglądała kolizja na pociskiem przelatującym przez głowę bohatera skoro maska będzie na same stopy?

Opublikowano

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.

  • Administratorzy
Opublikowano

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);

Opublikowano

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

Opublikowano

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.

Opublikowano

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ł?

  • Administratorzy
Opublikowano
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.

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

Opublikowano

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?

Opublikowano

1. W backgroundzie:

Opcje "Tile: Horizontal" i "Tile: Vertical"

 

2. W roomie:

Zakładka backgrounds > "Tile Hor." i "Tile Vert."

 

Zważając, że problem jest z jednym roomem obstawiam #2.

Opublikowano

Dziwne rzeczy się dzieją. Gra na exporcie Windows i Android chodzi tak jak powinna, natomiast przy HTML5 się w ogóle nie pojawia (pasek ładowania a potem czarna strona). Gra HTML5 odpalana oczywiście przez Web Server.

Opublikowano

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

Opublikowano

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

Opublikowano

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.

Opublikowano

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?

Opublikowano
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

Opublikowano

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.

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