Floating Windows, Looting System 1.2

24 06 2009

W poprzednim wpisie było o tworzeniu wjeżdżających okienek. Dzisiaj też będzie między innymi o tym. Otóż, napisałem skrypt, który daje taki sam efekt jak w poradniku. Różnicą jest to, że użytkownik ogranicza się do wpisania zaledwie dwóch linijek kodu. Parametry, którymi możemy sterować, to szybkość wjeżdżania, szybkość wyjeżdżania, pozycja okna na mapie oraz z której strony okno ma “wpływać” na ekran. Właśnie od wpływania pochodzi nazwa skryptu - Floating Windows. Opis używania znajdziecie w komentarzach. Ja zamieszczam tylko demo oraz kod skryptu.

Demo -> Klik!
Kod -> Klik!
Temat na rmxp.pl -> Klik!

Na prośbę jednego z forumowiczów rmxp.pl, wydałem nową wersję (1.2) skryptu Looting System. Jakie zmiany wprowadza? Najważniejsza z nich to zdecydowanie dodanie ikonek przedmiotów obok ich nazw. Teraz prezentuje się o wiele ładniej. Modyfikacji poddałem również proces zdobywania przedmiotów. Gdy zabierzemy całą ilość jednego przedmiotu, to nie jest on blokowany (napis jest szary) jak dotychczas, lecz całkiem wymazywany z okienka. Myślę, że takie rozwiązanie dodaje nieco dynamizmu skryptowi. Ostatnią już rzeczą jaką zrobiłem przy nocnym ślęczeniu nad kodem, to wyeliminowanie buga, który powodował błąd przy zabraniu całej ilości piątego i szóstego przedmiotu.

Kod -> Klik!
Temat na rmxp.pl -> Klik!

Trochę się powoli zbiera tych rzeczy. Dlatego na blogu dodałem nową zakładkę Projekty. Będzie tam widoczny spis wszystkich skryptów, poradników, tutoriali etc., które stworzyłem oraz linki do stron z nimi. Ułatwi to proces szukania tychże rzeczy na blogu.
Pozdrawiam!



Wjeżdżające okienka w RGSS

21 06 2009

Witajcie! Jako że mam teraz dość dużo czasu, postanowiłem napisać wam mały poradnik. Zapewne widzieliście już ładne CMSy (Custom Menu System), w których to okienka płynnie wjeżdżają na ekran, a po wyjściu wyjeżdżają z niego. Na pierwszy rzut oka można pomyśleć, że autor musiał trochę przesiedzieć pisząc kolejne linijki kodu. Nic bardziej mylnego! Proces tworzenia takiego efektu jest bardzo prosty. Zapraszam do czytania.

1. Projektowanie

Na początku najlepiej jest wszystko sobie zaplanować, żeby potem łatwo i przyjemnie się kodowało. Jerzy Grębosz w książce Symfonia C++ podzielił pracę nad programem (dotyczy programowania OO - orientowane obiektowo) na następujące fazy:
1. Rozpoznanie problemu
2. Projektowanie
3. Implementacja (kodowanie)
4. Testowanie
Pierwszy punkt przedstawiłem we wstępie, także teraz zajmiemy się dalszymi etapami.
A więc, co chcemy zrobić? Po podejściu do NPC(Non-Playable Character) na ekran mają nam się “wsunąć” dwa okienka. Dobrze by było te okienka zrobić, ale ten poradnik dotyczy czego innego. Jeśli ktoś ma problem z okienkami to zachęcam do poczytania tego -> Klik! W programie już mamy gotowych sporo okienek. My wybierzemy sobie dwa. Będą to Window_Gold oraz Window_Steps (najmniejsze, najprostsze). Kolejną rzeczą jest ustalenie pozycji tych okienek na mapie. Pomocną rzeczą okaże się sprawdzenie ich wymiarów. Wchodzimy w edytor skryptów (F11), a następnie w zakładkę Window_Gold. Metoda super() tworzy obiekt nadklasy, czyli w tym wypadku Window_Base (dziedziczenie). Niezbędą rzeczą jest podanie pozycji okna oraz wymiarów w metodzie super(). Właśnie z tego miejsca odczytujemy wymiary:
Window_Gold -> 160,64
Window_Steps -> 160,96
Powiedzmy, że okienko z ilością złota będzie miało współrzędne (200,100), a drugie okienko będzie tuż pod pierwszym (200,164). Przypominam, że program rysuje okienko zaczynając od lewego górnego rogu.
Co teraz? Window_Gold będzie wjeżdżało od strony lewej, natomiast Window_Steps od strony przeciwnej. Warto ustalić sobie pozycje okienek gdy będą poza ekranem. Cały proces ilustrują dwa poniższe obrazki:

scr1scr2

2. Kodowanie

Nasze okienka będą zainicjowane w nowej klasie, którą zaraz się zajmiemy. Tworzymy nową zakładkę i nadajemy jej nazwę. Nazwa zakładki nie ma najmniejszego znaczenia dla programu, ma zaś dla użytkownika. Scene_Okienka - ot, “byle jaka” nazwa, ale jest. Ważne jest aby ta klasa znajdowała się niżej niż Window_Gold oraz Window_Steps, gdyż będzie do się do nich odwoływać.
Zapewne przeglądałeś nie raz podstawowe klasy RPG Makera. Łatwo zauważyć, że w każdej znajdują się metody main oraz update. Bez nich ani rusz. U nas dodatkowe metody to appear oraz disappear, które będą odpowiadały kolejno za wjeżdżanie oraz wyjeżdżanie okna. Dobrze jest wykonać sobie wstępny szkielet projektu:

W klasie main ma nastapić proces inicjacji naszych okienek. Od razu ustalmy ich pozycję (poza ekranem) oraz stwórzmy dwa przełączniki, które będą odpowiadały za ruch okienek. Żeby pojawiło nam się tło mapy zamiast czarnego ekranu wystarczy stworzyć obiekt Spriteset_Map. Metoda main wygląda teraz tak:

Omińmy na razie dwie kolejne metody i przejdźmy do update.
Co ma się dziać tutaj? Jeśli przełącznik @appearing jest włączony, to wywołujemy metodę appear. To samo z @disappearing. Odświeżamy okienka oraz nasze tło. Ostatnią rzeczą jest zrobienie warunku na wciśnićcie klawisza ESC. Jeśli warunek zostanie spełniony, to odgrywamy dźwięk anulowania (cancel_se) oraz włączamy przełącznik odpowiadający za chowanie się okienek.

Pozostały nam dwie ostatnie, główne metody. Najpierw appear. Jak zrobić, by okno “wjeżdżało” na ekran? Wystarczy zmieniać jego pozycję w krótkich odstępach czasu. Na początku ustaliliśmy, że Window_Gold (tutaj @okno1) będzie miało współrzędne (200,100) oraz, że będzie się wsuwało od lewej strony. Wspłórzędna osi OY pozostaje bez zmian. Operować będziemy na OX. Tworzymy warunek: zwiększaj współrzędną x okienka pierwszego o 10px, jeśli ta współrzędna jest mniejsza od 200. To samo robimy z drugim okienkiem, tylko że w przeciwną stronę. Musimy dodać jeszcze jeden warunek, który sprawdzi czy oba okienka znajdują się już w swoich pozycjach. Jeśli tak, to przełącznik wyłączamy i metoda jest nieaktwyna.
Metoda disappear jest niemal identyczna. Z tym, że okienka poruszają się w drugą stronę. A jeśli osiągną daną współrzędną, to wywołujemy Scene_Map. Ot, to wszystko. Całość prezentuje się następująco:

Wypadałoby przetestować. Jeśli robiłeś wszystko tak, jakjest napisane - to nie powinno być żadnych kłopotów z działaniem skryptu.

Pozdrawiam!



Holiday.new(”2009″)

19 06 2009

Pierwszy rok nauki w liceum minął bezpowrotnie. Najważniejsze, że zdałem do kolejnej klasy. Przede mną - jakże zasłużone - wakacje. 2,5 miesiaca opieprzania się…? Nieee, ten czas trzeba wykorzystać najlepiej jak się tylko da. W związku z tym zaplanowałem sobie kilka rzeczy nad którymi popracuję w tym bezstresowym okresie:

1. Ruby
Na to już jestem “uzbrojony”. W następnym tygodniu powinna przyjść zamówiona przeze mnie książka o nauce tego języka (Klik!). Do końca wakacji chcę przerobić całość. Myślę, że dam radę, bo ‘coś tam’ już potrafię zrobić. Jeśli wystarczy czasu, to zabiorę się za naukę frameworka Ruby on Rails.

2. Tworzenie gry
Choć od kilku już miesięcy zajmuję się tworzeniem gry RPG, to jeszcze o tym nie wspominałem. Dzisiaj postanowiłem ujawnić tajemnicę. Jak na razie efekt pracy jest znikomy, ale podczas roku szkolnego ciężko cokolwiek zrobić. Właśnie od tego są wakacje ^^

3. Grafika
Grafik ze mnie marny, a dość często przydają się właśnie te umiejętności. A to jakąś ikonkę zrobić, postać do gry, czy nawet HUDa. Ostatnio zacząłem się bawić w Pixel Art - dość przyjemna sprawa i jaka relaksacyjna ;]

4. Kondycja
W końcu coś nie związanego z komputerem. O kondycję trzeba dbać. W maju zacząłem biegać wieczorami, ale to sporadczynie. Za to często gram w piłkę nożną, a na wakacjach za pewne będę to czynił codziennie, a raczej co wieczór. A rano będę biegał.
Dość poważnie myślę nad zapisaniem się do miejscowego klubu piłkarskiego. No co? Trzeba coś robić, żeby się nie nudzić. I nie można całych wakacji przesiedzieć przed monitorem ;) A poza tym sport to zdrowie!

Z takich główniejszych rzeczy to by było na tyle.
A i jeszcze jedna sprawa. W przyszłym tygodniu na ZamCampie mam wygłosić prezentację na temat języka Ruby. Kto wie, może kogoś zachęcę do tego, moim zdaniem wspaniałego, języka.

Do następnego!