Co do zatrzymania bohatera. Należałoby skorzystać już nie z okna, tylko z klasy Scene.
Dokładnie!
Robimy klasę "Scene"!
Teraz można przeczytać poradę Thieffera tu: Thieffer’s Blog
Ale robimy dalej!
Krok 2 - Scene + Animacja wjazdowa
Spoiler:
Tworzymy nad poprzednią klasą(Window_Zadania) nową klasę:
Np:
Kod:
class Scene_Zadania
I pod tym:
Kod:
def main
Następnie piszemy:
Kod:
@zadania = Window_Zadania.new
Teraz gdy mamy już "odnośnik" do naszego okna... piszemy pod tym:
Kod:
@zadania.x = 320 # Współrzędna X
@zadania.y = 0 # Współrzędna Y
@spriteset = Spriteset_Map.new
@appearing = true # Animacja wjazdowa ON
@disappearing = false # Animacja wjazdowa OFF
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
@spriteset = Spriteset_Map.new - Jak tego nie dasz to mapa zrobi się czarna na czas wyświetlania okienka.
Następnie trzeba napisać tak:
Kod:
Graphics.freeze
@zadania.dispose
@spriteset.dispose
end
def appear
@zadania.x += 40 if @zadania.x < 320
if @zadania.x == 320
@appearing = false
end
end
def disappear
@zadania.x -= 20 if @zadania.x > -320
if @zadania.x == -320
$scene = Scene_Map.new
end
end
def update
if @appearing
appear
end
if @disappearing
disappear
end
@zadania.update
@spriteset.update
if Input.trigger?(Input::A)
$game_system.se_play($data_system.cancel_se)
@disappearing = true
end
end
end
Po kolej powiem co do czego służy...
Kod:
def appear
Definicja wjazdowa okna.
Kod:
def disappear
Definicja wyjazdowa okna.
Kod:
if Input.trigger?(Input::A)
$game_system.se_play($data_system.cancel_se)
@disappearing = true
end
Kiedy przycisk "A" jest wciśnięty, wtedy odgrywany jest dźwięk(anulowania) oraz animacja wyjazdowa(@disappearing = true) jest włączona. Inaczej mówiąc, okno się chowa.
Kod:
@zadania.x += 40 if @zadania.x < 320
"<320" to znaczy, że okno porusza się aż nie osiągnie danej współrzędnej, natomiast "40" to "prędkość" okienka.
Na razie nasz kod prezentuje się następująco:
Spoiler:
Kod:
#-----------------------------------------------------------------------------
# class Scene_Zadania
#-----------------------------------------------------------------------------
class Scene_Zadania
def main
@zadania.x = 320
@zadania.y = 0
@spriteset = Spriteset_Map.new
@appearing = true
@disappearing = false
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@zadania.dispose
@spriteset.dispose
end
def appear
@zadania.x += 40 if @zadania.x < 320
if @zadania.x == 320
@appearing = false
end
end
def disappear
@zadania.x -= 20 if @zadania.x > -320
if @zadania.x == -320
$scene = Scene_Map.new
end
end
def update
if @appearing
appear
end
if @disappearing
disappear
end
@zadania.update
@spriteset.update
if Input.trigger?(Input::A)
$game_system.se_play($data_system.cancel_se)
@disappearing = true
end
end
end
#-----------------------------------------------------------------------------
# class Window_Zadania
#-----------------------------------------------------------------------------
class Window_Zadania < Window_Base
def initialize(x = 160, y = 120, width = 320, height = 240)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 18
self.back_opacity = 160
refresh
end
def refresh
self.contents.draw_text(0, 0, 288, 32, "Zadania", 1)
if $game_variables[1] == 1
self.contents.draw_text(0, 0, 288, 64, "1 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 64, "1 Zadanie - Nieukończone", 1)
end
end
end
Krok 3 - Scene_Map
Spoiler:
Dobrze jeszcze tylko dwa kroki...!
Chcemy, aby nasze okno uruchamiało się automatycznie...
Kopiujemy z klasy Scene_Map:
Kod:
#-----------------------------------------------------------------------------
# class Scene_Map
#-----------------------------------------------------------------------------
class Scene_Map
def main
@spriteset = Spriteset_Map.new
@message_window = Window_Message.new
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@spriteset.dispose
@message_window.dispose
if $scene.is_a?(Scene_Title)
Graphics.transition
Graphics.freeze
end
end
end
I dajemy do naszego skryptu...
Ale trzeba jeszcze dać uruchomianie przyciskiem...
Wklejić po:
Kod:
loop do
To:
Kod:
if Input.trigger?(Input::A)
$scene = Scene_Zadania.new
end
Mamy teraz taki kod:
Spoiler:
Kod:
#-----------------------------------------------------------------------------
# class Scene_Zadania
#-----------------------------------------------------------------------------
class Scene_Zadania
def main
@zadania.x = 320
@zadania.y = 0
@spriteset = Spriteset_Map.new
@appearing = true
@disappearing = false
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@zadania.dispose
@spriteset.dispose
end
def appear
@zadania.x += 40 if @zadania.x < 320
if @zadania.x == 320
@appearing = false
end
end
def disappear
@zadania.x -= 20 if @zadania.x > -320
if @zadania.x == -320
$scene = Scene_Map.new
end
end
def update
if @appearing
appear
end
if @disappearing
disappear
end
@zadania.update
@spriteset.update
if Input.trigger?(Input::A)
$game_system.se_play($data_system.cancel_se)
@disappearing = true
end
end
end
#-----------------------------------------------------------------------------
# class Window_Zadania
#-----------------------------------------------------------------------------
class Window_Zadania < Window_Base
def initialize(x = 160, y = 120, width = 320, height = 240)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 18
self.back_opacity = 160
refresh
end
def refresh
self.contents.draw_text(0, 0, 288, 32, "Zadania", 1)
if $game_variables[1] == 1
self.contents.draw_text(0, 0, 288, 64, "1 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 64, "1 Zadanie - Nieukończone", 1)
end
end
end
#-----------------------------------------------------------------------------
# class Scene_Map
#-----------------------------------------------------------------------------
class Scene_Map
def main
@spriteset = Spriteset_Map.new
@message_window = Window_Message.new
Graphics.transition
loop do
if Input.trigger?(Input::A)
$scene = Scene_Zadania.new
end
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@spriteset.dispose
@message_window.dispose
if $scene.is_a?(Scene_Title)
Graphics.transition
Graphics.freeze
end
end
end
Właściwie to na tym etapie można zakończyć tutoriala, ale ten ostatni krok jest łatwy i przyjemny.(Jak dla mnie.)
Aby zakończyć zadanie wywołaj w zdarzeniu zmienną np. 1.
Krok 4 - module MOG
Spoiler:
Najpierw... co to jest?
module MOG, to system ułatwiający konfiguracje skryptu na:
Na początku skryptu umieść:
Kod:
module MOG
I po nim:
Kod:
end
W środku(pomiędzy "module MOG" a "end") napisz np:
Kod:
MPLOL = Input::A
Teraz znajdź w kodzie linijkę:(Twój Scene_Map)
Kod:
if Input.trigger?(Input::A)
$scene = Scene_Zadania.new
end
I zmień:
Kod:
Input::A
Na:
Kod:
MOG::MPLOL
Teraz za pomocą "odnośnika" możesz łatwo konfigurować skrypt.
A tu daje cały mój skrypt: (MOŻESZ KOŻYSTAĆ ZE SKRYPTU POD WARUNKIEM, ŻE ZOSTAWISZ INFORMACJE O AUTORZE SKRYPTU - CZYLI JA.)
# Przełącznik odpowiadający za włączanie/wyłączanie okna
MPPAP = 1
# Klawisz odpowiadający za pokazywanie okna
MPINP1 = Input::A
# Klawisz odpowiadający za chowanie okna
MPINP2 = Input::A
# Nazwa czcionki w oknie
MPFONT1 = "Times New Roman"
# Rozmiar czcionki w oknie
MPFONT2 = 22
# Windowskin okna
MPWIN = "001-blue01"
# Przezroczystość okna
MPOPC = 255
# Szybkość wjazdowa okna
MPXYW = 40
# Szybkość wyjazdowa okna
MPXYE = 20
# Pozycja okna
# 0 - Górny prawy róg (Wjazd z lewej strony)
# 1 - Dolny prawy róg (Wjazd z lewej strony)
# 2 - Górny lewy róg (Wjazd z lewej strony)
# 3 - Dolny lewy róg (Wjazd z lewej strony)
# 4 - Na środku
# 5 - Pełny ekran
# 6 - Pełny ekran i brak animacji wjazdowej
# 7 - Dowolnie
MPNMPS = 0
# Zmiana współrzędnych jeśli wybrano 7
if MOG::MPNMPS == 7
MPXYP1 = -320 # Pozycja X początkowa okna
MPXYP2 = 0 # Pozycja Y początkowa okna
MPXYP3 = 320 # Pozycja X wjeżdżającego okna (Wjazd)
MPXYP4 = 320 # Pozycja X wjeżdżającego okna (Zatrzymanie)
MPXYP5 = -320 # Pozycja X wyjeżdżającego okna (Wyjazd)
MPXYP6 = -320 # Pozycja X wyjeżdżającego okna (Zatrzymanie)
MPIR1 = 160 # Pozycja okna X
MPIR2 = 120 # Pozycja okna Y
MPIR3 = 320 # Szerokość okna
MPIR4 = 240 # Wysokość okna
end
# Koniec
end
if MOG::MPNMPS == 0
MPXYP1 = -320 # Pozycja X początkowa okna
MPXYP2 = 0 # Pozycja Y początkowa okna
MPXYP3 = 320 # Pozycja X wjeżdżającego okna (Wjazd)
MPXYP4 = 320 # Pozycja X wjeżdżającego okna (Zatrzymanie)
MPXYP5 = -320 # Pozycja X wyjeżdżającego okna (Wyjazd)
MPXYP6 = -320 # Pozycja X wyjeżdżającego okna (Zatrzymanie)
MPIR1 = 160 # Pozycja okna X
MPIR2 = 120 # Pozycja okna Y
MPIR3 = 320 # Szerokość okna
MPIR4 = 240 # Wysokość okna
end
if MOG::MPNMPS == 1
MPXYP1 = -320 # Pozycja X początkowa okna
MPXYP2 = 240 # Pozycja Y początkowa okna
MPXYP3 = 320 # Pozycja X wjeżdżającego okna (Wjazd)
MPXYP4 = 320 # Pozycja X wjeżdżającego okna (Zatrzymanie)
MPXYP5 = -320 # Pozycja X wyjeżdżającego okna (Wyjazd)
MPXYP6 = -320 # Pozycja X wyjeżdżającego okna (Zatrzymanie)
MPIR1 = 160 # Pozycja okna X
MPIR2 = 120 # Pozycja okna Y
MPIR3 = 320 # Szerokość okna
MPIR4 = 240 # Wysokość okna
end
if MOG::MPNMPS == 2
MPXYP1 = -320 # Pozycja X początkowa okna
MPXYP2 = 0 # Pozycja Y początkowa okna
MPXYP3 = 0 # Pozycja X wjeżdżającego okna (Wjazd)
MPXYP4 = 0 # Pozycja X wjeżdżającego okna (Zatrzymanie)
MPXYP5 = -320 # Pozycja X wyjeżdżającego okna (Wyjazd)
MPXYP6 = -320 # Pozycja X wyjeżdżającego okna (Zatrzymanie)
MPIR1 = 160 # Pozycja okna X
MPIR2 = 120 # Pozycja okna Y
MPIR3 = 320 # Szerokość okna
MPIR4 = 240 # Wysokość okna
end
if MOG::MPNMPS == 3
MPXYP1 = -320 # Pozycja X początkowa okna
MPXYP2 = 240 # Pozycja Y początkowa okna
MPXYP3 = 0 # Pozycja X wjeżdżającego okna (Wjazd)
MPXYP4 = 0 # Pozycja X wjeżdżającego okna (Zatrzymanie)
MPXYP5 = -320 # Pozycja X wyjeżdżającego okna (Wyjazd)
MPXYP6 = -320 # Pozycja X wyjeżdżającego okna (Zatrzymanie)
MPIR1 = 160 # Pozycja okna X
MPIR2 = 120 # Pozycja okna Y
MPIR3 = 320 # Szerokość okna
MPIR4 = 240 # Wysokość okna
end
if MOG::MPNMPS == 4
MPXYP1 = -320 # Pozycja X początkowa okna
MPXYP2 = 120 # Pozycja Y początkowa okna
MPXYP3 = 140 # Pozycja X wjeżdżającego okna (Wjazd)
MPXYP4 = 140 # Pozycja X wjeżdżającego okna (Zatrzymanie)
MPXYP5 = -320 # Pozycja X wyjeżdżającego okna (Wyjazd)
MPXYP6 = -320 # Pozycja X wyjeżdżającego okna (Zatrzymanie)
MPIR1 = 160 # Pozycja okna X
MPIR2 = 120 # Pozycja okna Y
MPIR3 = 320 # Szerokość okna
MPIR4 = 240 # Wysokość okna
end
if MOG::MPNMPS == 5
MPXYP1 = -640 # Pozycja X początkowa okna
MPXYP2 = 0 # Pozycja Y początkowa okna
MPXYP3 = 0 # Pozycja X wjeżdżającego okna (Wjazd)
MPXYP4 = 0 # Pozycja X wjeżdżającego okna (Zatrzymanie)
MPXYP5 = -640 # Pozycja X wyjeżdżającego okna (Wyjazd)
MPXYP6 = -640 # Pozycja X wyjeżdżającego okna (Zatrzymanie)
MPIR1 = 0 # Pozycja okna X
MPIR2 = 0 # Pozycja okna Y
MPIR3 = 640 # Szerokość okna
MPIR4 = 480 # Wysokość okna
end
if MOG::MPNMPS == 6
MPXYP1 = 0 # Pozycja X początkowa okna
MPXYP2 = 0 # Pozycja Y początkowa okna
MPXYP3 = 0 # Pozycja X wjeżdżającego okna (Wjazd)
MPXYP4 = 0 # Pozycja X wjeżdżającego okna (Zatrzymanie)
MPXYP5 = 0 # Pozycja X wyjeżdżającego okna (Wyjazd)
MPXYP6 = 0 # Pozycja X wyjeżdżającego okna (Zatrzymanie)
MPIR1 = 0 # Pozycja okna X
MPIR2 = 0 # Pozycja okna Y
MPIR3 = 640 # Szerokość okna
MPIR4 = 480 # Wysokość okna
end
#-----------------------------------------------------------------------------
# class Scene_Map
#-----------------------------------------------------------------------------
class Scene_Map
def main
@spriteset = Spriteset_Map.new
@message_window = Window_Message.new
Graphics.transition
loop do
if $game_switches[MOG::MPPAP] == MOG::MPPA
if Input.trigger?(MOG::MPINP1)
$scene = Scene_Zadania.new
end
end
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@spriteset.dispose
@message_window.dispose
if $scene.is_a?(Scene_Title)
Graphics.transition
Graphics.freeze
end
end
end
#-----------------------------------------------------------------------------
# class Scene_Zadania
#-----------------------------------------------------------------------------
class Scene_Zadania
def main
@zadania = Window_Zadania.new
$game_system.se_play($data_system.decision_se)
@zadania.x = MPXYP1
@zadania.y = MPXYP2
@spriteset = Spriteset_Map.new
@appearing = true
@disappearing = false
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@zadania.dispose
@spriteset.dispose
end
def appear
@zadania.x += MOG::MPXYW if @zadania.x < MPXYP3
if @zadania.x == MPXYP4
@appearing = false
end
end
def disappear
@zadania.x -= MOG::MPXYE if @zadania.x > MPXYP5
if @zadania.x == MPXYP6
$scene = Scene_Map.new
end
end
def update
if @appearing
appear
end
if @disappearing
disappear
end
@zadania.update
@spriteset.update
if $game_switches[MOG::MPPAP] == MOG::MPPA
if Input.trigger?(MOG::MPINP2)
$game_system.se_play($data_system.cancel_se)
@disappearing = true
end
end
end
end
#-----------------------------------------------------------------------------
# class Window_Zadania
#-----------------------------------------------------------------------------
class Window_Zadania < Window_Base
def initialize (x = MPIR1, y = MPIR2, width = MPIR3, height = MPIR4)
super(x, y, width, height)
self.windowskin = RPG::Cache.windowskin(MOG::MPWIN)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = MOG::MPFONT1
self.contents.font.size = MOG::MPFONT2
self.back_opacity = MOG::MPOPC
refresh
end
def refresh
self.contents.draw_text(0, 0, 288, 32, "Zadania", 1)
if $game_variables[1] == 1
self.contents.draw_text(0, 0, 288, 64, "1 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 64, "1 Zadanie - Nieukończone", 1)
end
if $game_variables[2] == 1
self.contents.draw_text(0, 0, 288, 96, "2 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 96, "2 Zadanie - Nieukończone", 1)
end
if $game_variables[3] == 1
self.contents.draw_text(0, 0, 288, 128, "3 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 128, "3 Zadanie - Nieukończone", 1)
end
if $game_variables[4] == 1
self.contents.draw_text(0, 0, 288, 160, "4 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 160, "4 Zadanie - Nieukończone", 1)
end
if $game_variables[5] == 1
self.contents.draw_text(0, 0, 288, 192, "5 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 192, "5 Zadanie - Nieukończone", 1)
end
if $game_variables[6] == 1
self.contents.draw_text(0, 0, 288, 224, "6 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 224, "6 Zadanie - Nieukończone", 1)
end
if $game_variables[7] == 1
self.contents.draw_text(0, 0, 288, 256, "7 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 256, "7 Zadanie - Nieukończone", 1)
end
if $game_variables[8] == 1
self.contents.draw_text(0, 0, 288, 288, "8 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 288, "8 Zadanie - Nieukończone", 1)
end
if $game_variables[9] == 1
self.contents.draw_text(0, 0, 288, 320, "9 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 288, 320, "9 Zadanie - Nieukończone", 1)
end
if $game_variables[10] == 1
self.contents.draw_text(0, 0, 280, 352, "10 Zadanie - Ukończone", 1)
else
self.contents.draw_text(0, 0, 280, 352, "10 Zadanie - Nieukończone", 1)
end
end
end
Mam nadzieję, że się komuś przyda.
PozdrawiamCreeperCrisis - Sob 12 Cze, 2010 12:19 Tutek bardzo ładny i przejrzysty. Wszystko w nim rozumiem i inni również mogliby takie coś zrozumieć. (serio, tutek jest świetny XD) i jeszcze coś. Fajna zabawa z skryptami erienus - Sob 12 Cze, 2010 15:14 Ja akurat mniej rozumiem xD Ale tutorial ładny, ale mógłbyś dać różne możliwości konfiguracji itp.kenogawa - Sob 12 Cze, 2010 22:08 Dobry jesteś bowinszować tak dalej kolejnych skryptów przyda się Agumon - Pon 14 Cze, 2010 14:22 Bardzo fajnie opisany tutorial. Wszystko leży tam gdzie powinno. 10/5postrach1992 - Nie 20 Cze, 2010 11:55 Bardzo dobry tutek MelvinMoj - Sob 07 Sie, 2010 12:19 Dasz demo ?Amelanduil - Pon 09 Sie, 2010 17:11
Cytat:
Dasz demo ?
nie, bo ma bana.
POZA TYM:
TUTORIALE są po to, żeby samemu robić, przy okazji ucząc się na programie, więc nie ma tak łatwo... zapewne tylko skopiowałbyś skrypt, prawda? Kumpel - Wto 18 Sty, 2011 20:23 Dobry tutek!haskias - Nie 27 Lut, 2011 09:15 Bardzo dobry tutek! Nawet ja zrozumiałem