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.)
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
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?
________________________
(╯°□°)╯︵ ┻━┻
"A jeśli... Boga nie ma, to co z ciebie za szatan?"
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum