Skocz do zawartości

Jak mam przesuwać tło za bohaterem?


Moribundo

Rekomendowane odpowiedzi

Cześć. Chciałbym zrobić takie coś, żeby tło przesuwało się w momencie, kiedy gracz idzie do przodu albo do tyłu. Nie wiem jak to zrobić, do tła nie można przypisać kodu, może to nie powinno być tło w takim razie? Chciałem, żeby gracz był w środku, a tło mogło się zapętlać, tak, żeby idąc w prawo, gracz wracał po jakimś czasie w to samo miejsce. Pomóżcie!

Odnośnik do komentarza
Udostępnij na innych stronach

Domyślnie tło samo się zapętla a swój początek ma w punkcje 0,0 room. Wszystko teraz zależy od tego co chcesz zrobić.

Czy to ma być paralax czy może jakiś inny efekt. Wszystkie funkcje i zmienne dotyczące teł zaczynają się od background_*, a zmienne są tablicami (bo możesz ustawić sobie kilka teł w room). Tak więc background_x[0] to zmienna pozycji x pierwszego tła. Możesz do niej np przypisać pozycje gracza pomnorzoną przez jakaś wartość aby otrzymać paralaksę.

GML
background_x[0]=gracz.x*1.1
Odnośnik do komentarza
Udostępnij na innych stronach

Cześć. Chciałbym zrobić takie coś, żeby tło przesuwało się w momencie, kiedy gracz idzie do przodu albo do tyłu. Nie wiem jak to zrobić, do tła nie można przypisać kodu, może to nie powinno być tło w takim razie? Chciałem, żeby gracz był w środku, a tło mogło się zapętlać, tak, żeby idąc w prawo, gracz wracał po jakimś czasie w to samo miejsce. Pomóżcie!

 

Jeśli korzystasz z obiektu draw_self(), to tło będzie w miejscu, a Ty będziesz względem niego się poruszał, więc efekt z definicji będzie taki jak chcesz.

 

Co więc zrobiłeś kontrolowanemu obiektowi iż tak się nie dzieje?

 

...pomnorzoną...

 

Nie matura leć chęć szczera...

 

Wyszukiwanie błędów w kodzie?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...

Hej. Moje pytanie było źle sformułowane, może teraz wyrażę się lepiej:

 

Nie chodzi o tło, ale o cały room.

Chcę, żeby gracza docierając do jego prawej krawędzi - końca room'u - wracał na jego początek, czyli znów pojawiał się za jego lewą krawędzią.

Metaforycznie rzecz ujmując, chciałbym żeby gracz chodził wzdłuż planszy nawiniętej na "bęben".

Jeśli znacie teledysk REM Shiny happy people, to o to mi właśnie chodzi. Tam dziad pedałuje na rowerze i przesuwa się prześcieradło, a ja chcę, żeby tak samo przesuwał się mój room, z wszystkimi obiektami jakie tam powstawiam

 

https://www.youtube.com/watch?v=iCQ0vDAbF7s

 

Gracz ma stać cały czas w miejscu, ale to już wiem jak zrobić. Klawisz w prawo - on stoi a tło przesuwa się w lewo. Odwrotnie, klawisz w lewo, tło w prawo. To też działa. Problem pojawia się, gdy dochodzę do krawędzi room'u. Jestem w kropce od miesiąca przynajmniej, proszę, pomóżcie. Im prościej, tym lepiej, jestem nadal na poziomie podstawowym!

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym zapisał obiekty do grida, a potem ustalał ich pozycje na podstawie naszego umiejscowienia w tym gridzie. + 4 ify, które będą sprawdzały czy grid się nie kończy i nie trzeba przesunać obiektów z początku grida i na odwrót.

W sumie wystarczy przesuwać obiekty w taki sposób.

Naciskamy strzałkę w prawo.

Tlo przesuwa się w prawo

Cała linia y, przesuwa się na pozycję y+1, a te które wychodzą poza grid, idą na początek.

Odnośnik do komentarza
Udostępnij na innych stronach

Jest chyba nawet domyślna akcja która to robi, ale robi to brzydko. Ogółem musisz sprawdzić czy gracz przeszedł pewna granicę i wtedy przenieść go na drugą stronę room. Wygląda to mniej więcej tak:

GML
if(x<0){x+=room_width}

if(x>room_width){x-=room_width}

 

Tylko że ty musisz to bardziej pod siebie przerobić. Prawdopodobnie musisz zrobić sobie jakiś margines, no i na pewno musisz stworzyć kopie obiektów przy krawędziach mapy. To może też da się zautomatyzować.

Odnośnik do komentarza
Udostępnij na innych stronach

Pytam z czystej ciekawości teraz. Po co kopie obiektów? Bo nie rozumiem.

Trzeba by narysować żeby łatwo wyjaśnić. Jeżeli chcemy zrobić płynne przejście nie wykrywalne dla gracza to po przejściu z jednego krańca room na drugi wszystkie obiekty muszą być na tych samych miejscach. Coś takiego zrobiłem kiedyś na ligę.

Odnośnik do komentarza
Udostępnij na innych stronach

Gracz ma stać cały czas w miejscu, ale to już wiem jak zrobić. Klawisz w prawo - on stoi a tło przesuwa się w lewo. Odwrotnie, klawisz w lewo, tło w prawo. To też działa. Problem pojawia się, gdy dochodzę do krawędzi room'u. Jestem w kropce od miesiąca przynajmniej, proszę, pomóżcie. Im prościej, tym lepiej, jestem nadal na poziomie podstawowym!

 

Podany teledysk jest odwrotnością tego co piszesz powyżej. W teledysku przesuwa się tło a postać stoi w miejscu (jak na starych filmach widok przesuwającego się tła widoczny w oknie nieruchomego samochodu). To w końcu ten Twój gracz stoi w jednej pozycji (jak w teledysku) czy chodzi po ekranie i dochodzi do krawędzi?

W pierwszym przypadku wystarczy wyświetlać dwa tła i w DRAW dać:

GML
draw_background(background0,poz_x,0); //rysuje tlo nr1

draw_background(background0,poz_x-room_width,0);//rysuje drugie tlo przesuniete wzgledem pierwszego o szerokosc rooma

draw_sprite(sprite0,-1,x,y);//wyswietla sprajt obiektu gracza

 

a w klawiszach sterujących LEFT

GML
//Left

poz_x++;//przesuwa tla w prawo

if poz_x>room_width then poz_x:=0

 

RIGHT

GML
//Right

poz_x--;//przesuwa tla w lewo

if poz_x<0 then poz_x:=room_width

 

w CREATE musi być zdefiniowana zmienna poz_x

GML
//Create

image_speed:=0.1//predkosc animacji psa na biezni

poz_x:=0;//pozycja poczatkowa tla

 

 

W drugim przypadku, gdy postać jednak idzie po ekranie i dochodzi do krawędzi, tło jest nieruchome a jedynie potrzebujesz wyświetlać dodatkowo sprajt gracza po przeciwnej stronie ekranu (jeśli zależy Ci na tym by niewidoczna część gracza przy prawej krawędzi była już równocześnie widoczna przy lewej) lub zwyczajnie zamieniać pozycję x obiektu gracza po wyjściu za ekran (załóżmy gdy gracz jest szerokości 64px i origin masz na środku to idąc w prawo dajesz coś w rodzaju:

GML
if x > (room_width+32) then x:=-32

a idąc w lewo

GML
if x<-32 then x:=room_width+32
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ę...