collapse collapse

 Community


 User Info




Willkommen Gast. Bitte einloggen oder registrieren.

 Partnerseiten

rpgvx.net

Das Forum ist offline

Autor Thema: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map  (Gelesen 1337 mal)

Offline FlipelyFlip

  • Will sein Alter nicht verraten xD
  • Administrator
  • VX-Großmeister
  • ****
  • Beiträge: 884
  • Heyho (=
    • Flips Musik Kariere auf Facebook xD
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

Spoiler for Hiden:
Wie wir schon im vorherigen Tutorial gelernt haben, besteht ein Window aus folgendem beginn:
class Window_(Klassenname) < Window_BaseDieser 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

Spoiler for Hiden:
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

Spoiler for Hiden:
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

Spoiler for Hiden:
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.clearLö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

Spoiler for Hiden:
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.disposeDamit 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.updateDadurch haben wir nun alles nötige getan und unser Window wurde nun erfolgreich eingebunden =D

1.6) Wiederholung

Spoiler for Hiden:
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:

Spoiler for Hiden:
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:

Spoiler for Hiden:
Erstellt neben Aufgabe 1 ein Window dass euch das derzeitige Gold anzeigt.

Aufgabe 3:

Spoiler for Hiden:
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

Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map

Offline Silvanus

  • Der längste regestrierte User hier xD
  • VX-Großmeister
  • *****
  • Beiträge: 984
  • Makerer im Ruhezustand
Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map
« Antwort #1 am: August 01, 2010, 14:19:23 »
Zitat
« am: Heute um 03:41:54 »
Hui ;)

Find ich gut das endlich mal einer RGSS Tuts macht, erklärst auch alles recht gut.
Werd ich vll sogar verwenden, danke:D

Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map

Offline PDM

  • Bibliothekar
  • Global Mod
  • VX-Kenner
  • ****
  • Beiträge: 468
    • Mein Blog
Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map
« Antwort #2 am: August 01, 2010, 15:20:51 »
Geiles Tut!!! Endlich mal etwas zu RGSS.
Aber bei wenn ich das "Dispose" von dem Window unter "@message_window.dispose" setze, bleib es trotzdem da.
Wenn ich es aber vor "snapshot_for_background" setze, funktioniert es.
PDM's Gameplays
Skype-Name: lordpdm

Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map

Offline FlipelyFlip

  • Will sein Alter nicht verraten xD
  • Administrator
  • VX-Großmeister
  • ****
  • Beiträge: 884
  • Heyho (=
    • Flips Musik Kariere auf Facebook xD
Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map
« Antwort #3 am: August 01, 2010, 16:33:39 »
@Silvanus: Danke (=

@PDM: das wundert mich iwie oO bei mir gings auch als es drunter war. Is eigentlich egal wo das dispose steht, hauptsache es ist im terminate und in keiner abfrage drin, ausser das ganze Window gehört in die Abfrage (=

lg flip

Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map

Offline Ðeity

  • No Pain, no gain!
  • Administrator
  • Eventmeister
  • ****
  • Beiträge: 427
  • No Pain, no Gain!
    • Deity-VX
Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map
« Antwort #4 am: August 01, 2010, 16:34:40 »
Hi,
nettes Tut.
Habe eigentlich nichts auszusetzen, aber mal ein paar Sachen. ^^

"Punkte: " + "#{text}"Das "+" dazwischen ist eher unnötig. Das ganze kann auch ohne geschrieben werden, ist zwar das selbe in grün, aber kürzer. ^^
(Faustregel beim Scripten: Desto kürzer der Code desto besser das Script.)
"Punkte: #{text}"
Die Namen der Variablen sind eigentlich zimmlich unwichtig, solange man sie selber unterscheiden kann. Wird das ganze international und/oder für Andere muss man drauf achten, wie die Variablen zu bennen sind. So ist "text = $game_variables[1]" nicht unbedingt falsch, aber auch nicht wirklich das was es sein soll, da es nicht wirklich ein Text ist. ^^

Zuletzt solltest du erwähnen, dass bei solchen wichtigen Scenes wie bei Scene_Map die Methoden lieber aliased werden, da es ansonsten viele Fehler geben kann, wenn man auch andere Scripts benutzt, die auf die selben Methoden zugreifen. ^^

Nun bin ich kein Profi, und das Ein oder Andere kann dir wie Haarspalterei vorkommen, aber ich gebe nur das weiter, was ich bisher gelernt habe, bzw. mir beigebracht wurde. :P


MfG
Deity


« Letzte Änderung: August 01, 2010, 16:46:44 von Ðeity »



Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map

Offline FlipelyFlip

  • Will sein Alter nicht verraten xD
  • Administrator
  • VX-Großmeister
  • ****
  • Beiträge: 884
  • Heyho (=
    • Flips Musik Kariere auf Facebook xD
Re: RGSS Tutorial: Erstellen eines permanenten Windows auf einer Map
« Antwort #5 am: August 01, 2010, 16:50:59 »
joa ich verwend das + eigentlich nur zur Übersicht. Fürn Anfang ist es meiner Meinung nach besser wenn man ein paar unnötige Sachen drin hat, man aber versteht was es macht, als wie wenn man es viel kürzer hat und dann für komplizierters null plan hat wie es geht.

ich weiß das text falsch gewählt worden ist usw. aber ich dachte damit kann ichs am besten verdeutlichen^^"

Aliasen hab ich zwar noch nicht behandelt, in meinen Tuts werds aber demnächst noch machen. (=

Ich bin doch auch kein Profi Deity, ich versuche nur mit dem Wissen was ich hab, anderen zu helfen und ihnen auch RGSS näher zu bringen.

lg flip

 


 Bild des Monats

rooftop party

Views: 3184
By: papilion

 Umfrage

  • Wer soll das BdM gewinnen?
  • Dot Kandidat 1
  • 3 (25%)
  • Dot Kandidat 2
  • 1 (8%)
  • Dot Kandidat 3
  • 2 (16%)
  • Dot Kandidat 4
  • 0 (0%)
  • Dot Kandidat 5
  • 6 (50%)
  • Stimmen insgesamt: 12
  • View Topic

 Schnellsuche





SimplePortal 2.3.3 © 2008-2010, SimplePortal