Heyho,
Vorwort
Ich möchte euch in diesem Tutorial herzlichst begrüßen, jedoch empfehle ich das vorangegangene Menütutorial gelesen zu haben, mindestens bis Punkt 3. Hier wird darauf aufgebaut, was wir an wissen aus dem ersten Tutorial erlangt haben. Ich werde teilweise auch nicht merh so intensiv auf unsbekannte Befehle eingehen, da es nicht notwendig ist. Wiederholen werde ich sie dennoch ;)
Im heutigen Tutorial lernen wir folgendes:
Wie mein ein Window permanent auf einer Map anzeigen lassen kann. Was ihr in dem Window anzeigen lassen wolt ist euch selbst überlassen. Ihr könnt so die HP und MP anzeigen, oder auch einfach anderes Zeug was ihr wollt.
Inhalt
1) Einleitun
1.1) Window erstellen
1.2) Vorbereitungen um eine Variabel Anzeigen zu lassen
1.3) Window Variable und Text anzeigen lassen
1.4) Update
1.5) In Scene_Map einbinden
1.6) Wiederholung
2) Übungsbeispiele!
1) Einleitung
Wie wir schon im vorherigen Tutorial gelernt haben, besteht ein Window aus folgendem beginn:
class Window_(Klassenname) < Window_Base
Dieser Code wird auch heute unser kleiner Freund sein, mit dem wir unser Window erstellen werden. Es ist sehr einfach zu verstehen. Achja, bevor ichs vergesse: das wars auch schon großartig zur Einleitung.
1.1) Window erstellen
Wir fangen nun mit folgendem Scriptschnipsel an:
class Window_Anzeige < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 32)
refresh
end
Wie wir sehen können, wird hier das Window_Anzeige erstellt. Es erbt wie üblich aus dem Window_Base.
def initialize(x, y)
Wie schon von anderen Windows bekannt, wird hiermit das Window an die richtige Position gerückt. (x, y) stehen für die x und y Koordinaten.
super(x, y, 160, WLH + 32)
Da ich im letzten Tutorial zugeben musste, das ich nicht weiß, wofür das super steht, habe ich mich etwas schlau gemacht und es herausgefunden.
Das super erstellt einfach ein neues Window. Ebenso hatte ich bei WLH einen kleinen Tippfehler, es heißt nicht "Word-Line-High" sondern "Word-Line-Height" aber das ist ja weniger schlimm, oder?
refresh ist eine uns schon längst bekannte Methode, daher müssen wir ja darauf nicht näher eingehen. =D
1.2) Vorbereitungen um eine Variabel Anzeigen zu lassen
Hierzu müssen wir kurzerhand in die Methode Refresh. (=
def refresh
if $game_variables[1] > 9999
$game_variables[1] = 9999
end
text = $game_variables[1]
@punkte = $game_variables[1]
Was sehen wir nun hier alles?
Analyse läuft, ihr habt nun 2 Minuten Zeit zu wetten! Wer das Richtige Ergebnis hat, gewinnt das Recht weiter zu lesen =D
Nein jetzt ernsthaft: Wir sehen hier eine kleine If-Abfrage und zwei Zuweisungen.
If-Abfrage
if $game_variables[1] > 9999
$game_variables[1] = 9999
end
Bei der If-Abfrage wird nun abgefragt, ob die Variable 1 größer als 9999 ist. Natürlich könnte hier auch ein anderer wert stehen wenn man will. Ich habe den Wert 9999 deshalb gewählt, weil mich Cyberxerox darum gebeten hat, so ein Tutorial zu machen, da er es wahrscheinlich für sein Minispiel brauchen wird.
Aber nun weiter im Kontext: Wenn diese If-Abfrage true wird, dann wird die Variable 1 auf 9999 gesetzt, da wir ja nicht wollen, dass es höher geht.
text = $game_variables[1]
Wozu wird diese Zuweisung benötigt? So wie wir hier erkennen können, wird der Variable "text" der Wert von Variable 1 zugewiesen. Dadurch hat die Variable "text" jetzt einen Wert angenommen.
@punkte = $game_variables[1]
Hier wird noch eine Variable, und zwar die Variable "@punkte" ebenfalls der Variable 1 gleichgesetzt. Dies machen wir aus folgendem Grund: Wir werden es später für das updaten benötigen.
Doch was hat das ganze jetzt mit dem zu tun, dass wir eine Variable Anzeigen lassen können? Ganz einfach, das sind alles Vorbereitungen dazu, um den Wert einer Variable anzeigen zu lassen.
1.3) Text und Variable anzeigen lassen
Hier lernen wir nun, wie man eine Variable und einen Text im Fenster anzeigen lässt.
self.contents.clear
self.contents.draw_text(0, 0, 160, WLH, "Punkte: " + "#{text}")
So nun sehen wir, wie das ganze aussieht um einen Text und eine Variable anzeigen zu lassen. Recht seltsam oO
self.contents.clear
Löscht die Angezeigten sachen um Fehlanzeigen zu vermeiden.
self.contents.draw_text(0, 0, 160, WLH, "Punkte: " + "#{text}")
Hier sehen wir, das auf den X und Y Koordinaten mit dem Wert 0 der Text beginnt angezeigt zu werden. Er hat 160 pixel frei um angezeigt zu werden.
"Punkte: " zeigt den Text "Punkte: " an xD mit "#{text}" wird die Variable Text angezeigt. Besser gesagt der Wert dieser Variable (= das + zwischen "Punkte: " und "#{text}" verbindet beide Objekte zu einem Objekt, was angezeigt wird. Dadurch entfällt ein zweites self.contents.draw_text.
Nach diesem ganzen Code kommt dann ein End und die Refresh-Methode ist fertig.
1.4) Update
def update
if $game_variables[1] != @punkte
refresh
end
end
Hier finden wir nun endlich die Verwendung von der Variable @punkte.
In dieser Methode wird nun überprüft ob sich etwas zwischen der Variable 1 und der Variable @punkte verändert hat. trifft dies zu, so wird das ganze neu refresht um auf den neuesten Stand gebracht zu werden.
!= bedeutet so viel wie ungleich. Diese überprüfung findet man auch in den Conditional Branches.
1.5) Einbindung in Scene_Map
Hier in diesem Abschnitt lernen wir nun, wie wir nun unser Fenster in die Scene Map einbinden können. Ich werde aber auf keine anderen Befehle die in der Scene_Map erscheinen näher eingehen.
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
super
$game_map.refresh
@spriteset = Spriteset_Map.new
@message_window = Window_Message.new
end
Das ist der eigentliche Startcode von der Scene_Map. Nun müssen wir sie so verändern, dass es uns von anfang an, unser Window anzeigt. Dazu schreiben wir einfach unter "@message_window = Window_Message.new" folgendes:
@anzeige_window = Window_Anzeige.new(0,0)
Dieser Befehl würde nun dazu führen, dass unser Window auf den Koordinaten 0 und 0 angezeigt wird. Also oben links auf dem Bildschrim.
Doch damit ist nicht alles getan! Wir müssen es ja noch updaten und disposen!! Dazu gehen wir als nächstes in die Methode terminate
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
super
if $scene.is_a?(Scene_Battle) # If switching to battle screen
@spriteset.dispose_characters # Hide characters for background creation
end
snapshot_for_background
@spriteset.dispose
@message_window.dispose
if $scene.is_a?(Scene_Battle) # If switching to battle screen
perform_battle_transition # Execute pre-battle transition
end
end
Hier wird nun ebenfalls wie vorher, unter "@message_window.dispose" folgendes dazu getan:
@anzeige_window.dispose
Damit wird unser Window ebenfalls entfernt bei Menüaufruf oder sonstigen anderen Ereignissen, bei dennen eine Scene_Map nicht nötig ist. (auch in Kampfsystemen, die eine Map als Hintergrund haben).
Doch uns fällt auf, es fehlt noch ein update für unser Window in der Scene_Map. also gehen wir in die Methode update.
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
$game_map.interpreter.update # Update interpreter
$game_map.update # Update map
$game_player.update # Update player
$game_system.update # Update timer
@spriteset.update # Update sprite set
@message_window.update # Update message window
unless $game_message.visible # Unless displaying a message
update_transfer_player
update_encounter
update_call_menu
update_call_debug
update_scene_change
end
end
Hier müssen wir nun unter "@message_window.update" wieder folgendes einfügen:
@anzeige_window.update
Dadurch haben wir nun alles nötige getan und unser Window wurde nun erfolgreich eingebunden =D
1.6) Wiederholung
Was haben wir nun in diesem Kapitel gelernt?
Wir haben gelernt wie man in einem Window eine Variable anzeigt und wie man es mit dem Text verbindet. Wir haben ebenso gelernt, wie dieses Window permanent auf die Map eingebunden wird. Jetzt kann man sogar schon selbst solche Sachen erstellen und sich darüber freuen, dass sie funktionieren =D
Übungsbeispiele
Ja ihr habt richtig gelesen! Ihr erhaltet mehrere Aufgaben!
Aufgabe 1:
Erstellt links oben ein Window, dass euch die HP und MP Werter aller Helden sowie Namen und Klasse anzeigt. Verwendet dazu ruhig das Window_Base um die Codes dafür zu finden. Diesmal würde ich gern den Code per PM erhalten und auch einen Screen. Je weniger Variablen ihr habt umso besser seid ihr =D
Aufgabe 2:
Erstellt neben Aufgabe 1 ein Window dass euch das derzeitige Gold anzeigt.
Aufgabe 3:
Erstellt ein Window das unten folgendes Anzeigt: "X - Äpfel gefunden"
X wird durch die Variable 1 ersetzt. Sprich: Es soll anzeigen wieviele Äpfel man hat. Kann auch gern was anderes sein.
lg Flipely