Przesuwanie ekranu za bohaterem w TGF/MMF

Klikipedia - klikowa encyklopedia
Skocz do: nawigacji, wyszukiwarki
Autor.jpg
Autorem tego artykułu jest
morty

Artykuł ten pokaże, jak zrobić w programie TGF lub MMF przewijanie ekranu za bohaterem (tzw. scrolling). Przed przystąpieniem do właściwych zdarzeń musisz stworzyć w edytorze etapu planszę o wymiarach, przekraczających rozmiar okna. Wstaw bohatera, oraz parę platform lub obiektów (ew. tło), by można było zaobserwować efekt przewijania ekranu.

Prosty sposób osiągnięcia celu

Najprostszym wyjściem jest stworzenie następującego zdarzenia, przy założeniu, że ActiveA.gif to obiekt, do którego ma być wycentrowany ekran:

Zdarzenie do edytora zdarzeń
N Zdarzenia
1
+ EZ-special.png Always
EZ-frames.png Center playfield at (0,0 from) ActiveA.gif

Metoda ta ma dość poważną wadę - ekran nie przesuwa się płynnie, lecz sztywno co do miejsca położenia bohatera. Aby uzyskać płynny efekt można zastosować ulepszoną metodą z następnej sekcji (w dalszym ciągu ActiveA.gif to obiekt, za którym ma podążać ekran).

Płynny scrolling

Sposób płynny
N Zdarzenia
1
+ EZ-special.png Always
ActiveA.gif Set alterable value A to ActiveA.gif X position
ActiveA.gif Set alterable value B to ActiveA.gif Y position
2
+ EZ-special.pngRun this event once
ActiveA.gif set Alterable Value C to Alterable Value A
ActiveA.gif set Alterable Value D to Alterable Value B

Zdarzenie numer 1 zawsze będzie ustalało wartość A obiektu ActiveA.gif na jego pozycję X oraz wartość B obiektu ActiveA.gif na jego pozycję Y. Wartości A i B będą zatem przechowywać pozycje X i Y obiektu, natomiast ekran centrować będziemy do pozycji C i D obiektu ActiveA.gif.

Wartości C i D ustawimy jednokrotnie (zdarznie 2) na odpowiednio wartości A i B, tak, by na samym początku etap wycentrował się od razu do obiektu ActiveA.gif.

Dalszym ich ustalaniem zajmiemy się w kolejnych zdarzeniach:

3
+ ActiveA.gif Alterable Value A > ActiveA.gif Alterable Value C
+ EZ-timer.png Every 00'03
ActiveA.gif Add 1 to Alterable Value C
4
+ ActiveA.gif Alterable Value A < ActiveA.gif Alterable Value C
+ EZ-timer.png Every 00'03
ActiveA.gif Subtract 1 from Alterable Value C
5
+ ActiveA.gif Alterable Value B > ActiveA.gif Alterable Value D
+ EZ-timer.png Every 00'03
ActiveA.gif Add 1 to Alterable Value D
6
+ ActiveA.gif Alterable Value B < ActiveA.gif Alterable Value D
+ EZ-timer.png Every 00'03
ActiveA.gif Subtract 1 from Alterable Value D

Zdarzenia 3-6 odpowiadają za płynne zmiany wartości C i D, które powodują ich płynne przejście do wartości A i B. Jeśli zmieni się pozycja obiektu ActiveA.gif, to zgodnie ze zdarzeniem 1 wartości A i B przyjmą wartości pozycji X i Y. W tym momencie, wartości C i D pozostały niezmienione, a zatem na mocy zdarzeń 3,4,5,6 będą się zmniejszać/zwiększać tak długo, aż uzyskają wartość wartości A i B.

Wystarczy teraz wycentrować ekran do wartości C i D:

7
+ EZ-special.png Always
EZ-special.png Center X Playfield at ActiveA.gif Alterable Value C
EZ-special.png Center Y Playfield at ActiveA.gif Alterable Value D

Rozbudowa

Doświadczeni klikowcy zauważą, że zdarzenie 2 jest w powyższym przykładzie niezbyt optymalne - można by się obejść i bez tego, zamieniając odpowiednie wartości. Celowo użyłem jednak takiego sposobu, ponieważ znacznie ułatwia on rozbudowę zdarzeń.

Na przykład, zróbmy tak, by bohater zwrócony w lewo miał większy zakres patrzenia w lewo i vice versa. Wystarczy podmienić zdarzenie 1 na poniższe dwa:

1a
+ ActiveA.gif jest zwrócony w lewo
ActiveA.gif Set alterable value A to ActiveA.gif X position - 100
ActiveA.gif Set alterable value B to ActiveA.gif Y position
2a
+ ActiveA.gif jest zwrócony w prawo
ActiveA.gif Set alterable value A to ActiveA.gif X position + 100
ActiveA.gif Set alterable value B to ActiveA.gif Y position

Teraz ekran będzie centrowany tak, by była większa widoczność po stronie, w którą bohater jest zwrócony.

Dodatkowo, przy zmianie kierunku ekran płynnie przejdzie w nową pozycję

Analogicznie można stworzyć zdarzenia, które będą centrowały ekran w zależności od tego czy bohater spada, czy np. patrzy się w górę.