Ergebnis 1 bis 17 von 17

Thema: RMXP > Ruby-Script: Bräuchte Hilfe bei grafischem Menu-Window!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    "ox" und "oy" sind Attribute die jedes Window besitzt. Alle Attribute werden auf die gleiche Art und Weise verwendet. Du kannst den Wert eines Attributes setzen mit "self.attribute = value" wobei "attribute" der Name des Attributs ist, und "value" ein Wert, welcher dem Attribut zugewiesen werden soll.
    Zum Beispiel:
    Code:
    self.ox = 156
    self.oy = self.height / -3
    Dabei ist zu beachten, dass das "self" auch weggelassen werden kann, allerdings ist es sicherer es anzugeben um Namenskonflikte zu vermeiden.

    Das Schlüsselwort "self" sagt einfach aus, dass dein Code sich auf "dieses" Objekt bezieht. In dem Fall des Fensters halt auf das Fenster in welchem der Code gerade ausgeführt wird.
    Wörtlich: Das Fenster verändert seine eigenen Attribute und nicht die Attribute von einem anderen Fenster wenn du "self" verwendest.

    Das "super" bedeutet, dass du Code an die Oberklasse delegierst. Hier kommt ein Konzept zum Einsatz, welches in der Programmierung als Polymorphie bezeichnet wird und relativ kompliziert ist.
    Im Grunde beschreibt es ein Konzept um eine Klasse um Zusatzfunktionen zu erweitern. Zum Beispiel ist unser Window_Preview eine Unterklasse von Window_Selectable. Was das bedeutet ist, dass unser Window_Preview auch ein Window_Selectable ist, aber ein spezielleres.
    Da das Window_Preview ein Window_Selectable ist erbt es alle Attribute und Funktionen eines Windows. Unter anderem erbt es "ox" und "oy", aber auch vieles mehr.
    Wenn du an einer Stelle "super" verwendest dann sagst du explizit, dass du die Funktionalität der Oberklasse haben möchtest und eben nicht von der Klasse selbst, welche du gerade schreibst. Man benutzt es in der Regel nur, wenn man eine Funktion der Oberklasse erweitern will und die alte Funktion vollständig beibehalten möchte.

    Zum Beispiel unser "super(x, y, width, height)" in der Methode "initialize" sagt aus, dass wir an dieser Stelle die Methode "initialize" von Window_Selectable aufrufen möchten.
    Aber ich glaube das wird ein bisschen zu viel Theorie für einen Anfänger.

  2. #2
    Zitat Zitat
    Das Fenster verändert seine eigenen Attribute und nicht die Attribute von einem anderen Fenster wenn du "self" verwendest.
    Aber sollte das nicht sowieso immer implizit so sein? Ich frag nach, weil ich das self von Ruby auch nicht so wirklich durchschaue. In der Methode wird ja kein anderes contents benutzt.

  3. #3
    Nicht immer. Z.B. im Code von Cornix' letzten Beitrag ist es ein Muss. Wie soll Ruby ohne self hier zwischen Aufruf einer Methode und Zuweisung an eine lokale Variable unterscheiden? Andere Programmiersprachen wie C++ haben ein ähnliches Problem (Paramater vs. member variable), jedoch bevorzuge ich das Schreiben eines Schlüsselwortes (self oder this) anstatt eines Unterstriches am Ende des Bezeichners.

    contents.width anstatt self.contents.width zu schreiben ist jedoch okay (und in RGSS 1 und 2 vernachlässigbar schneller). Manche Leute bevorzugen es eben explizit oder wissen es nicht besser, weil die Standardskripte es so machen.

  4. #4
    Zitat Zitat von Kelven Beitrag anzeigen
    Aber sollte das nicht sowieso immer implizit so sein? Ich frag nach, weil ich das self von Ruby auch nicht so wirklich durchschaue. In der Methode wird ja kein anderes contents benutzt.
    Ja, es ist implizit so und kann meistens weg gelassen werden, allerdings wenn man einmal in eine Situation gerät wo man es braucht um einen Namenskonflikt auf zu lösen und es vergisst hat man sehr schnell einen Bug in seinem Code.
    Für einen Anfänger würde ich daher ersteinmal empfehlen immer das Schlüsselwort "self" zu verwenden, einfach um sicher zu sein.

    @Lil_Lucy
    Es freut mich, dass du dein Problem lösen konntest.

  5. #5
    Zitat Zitat von Cornix Beitrag anzeigen
    "ox" und "oy" sind Attribute die jedes Window besitzt. Alle Attribute werden auf die gleiche Art und Weise verwendet. Du kannst den Wert eines Attributes setzen mit "self.attribute = value" wobei "attribute" der Name des Attributs ist, und "value" ein Wert, welcher dem Attribut zugewiesen werden soll.
    Zum Beispiel:
    Code:
    self.ox = 156
    self.oy = self.height / -3
    Dabei ist zu beachten, dass das "self" auch weggelassen werden kann, allerdings ist es sicherer es anzugeben um Namenskonflikte zu vermeiden.

    Das Schlüsselwort "self" sagt einfach aus, dass dein Code sich auf "dieses" Objekt bezieht. In dem Fall des Fensters halt auf das Fenster in welchem der Code gerade ausgeführt wird.
    Wörtlich: Das Fenster verändert seine eigenen Attribute und nicht die Attribute von einem anderen Fenster wenn du "self" verwendest.

    Das "super" bedeutet, dass du Code an die Oberklasse delegierst. Hier kommt ein Konzept zum Einsatz, welches in der Programmierung als Polymorphie bezeichnet wird und relativ kompliziert ist.
    Im Grunde beschreibt es ein Konzept um eine Klasse um Zusatzfunktionen zu erweitern. Zum Beispiel ist unser Window_Preview eine Unterklasse von Window_Selectable. Was das bedeutet ist, dass unser Window_Preview auch ein Window_Selectable ist, aber ein spezielleres.
    Da das Window_Preview ein Window_Selectable ist erbt es alle Attribute und Funktionen eines Windows. Unter anderem erbt es "ox" und "oy", aber auch vieles mehr.
    Wenn du an einer Stelle "super" verwendest dann sagst du explizit, dass du die Funktionalität der Oberklasse haben möchtest und eben nicht von der Klasse selbst, welche du gerade schreibst. Man benutzt es in der Regel nur, wenn man eine Funktion der Oberklasse erweitern will und die alte Funktion vollständig beibehalten möchte.

    Zum Beispiel unser "super(x, y, width, height)" in der Methode "initialize" sagt aus, dass wir an dieser Stelle die Methode "initialize" von Window_Selectable aufrufen möchten.
    Aber ich glaube das wird ein bisschen zu viel Theorie für einen Anfänger.
    O.K. bin zwar nicht sicher ob ich alles jetzt so wirklich verstanden habe, aber funktioniert hat es und ich hab jetzt ein akzeptables Ergebnis. Ich guck mir das morgen nochmal an und seh dann ob ichs noch etwas feiner hinkrieg, aber jetzt geh ich erstmal ins Bett.

    Danke soweit und bis zum nächsten Problem

    MfG

    Lil_Lucy

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •