Solved [XP/RGSS] Window: Refresh löscht contents, aber schreibt nicht neu
Hi , wieder mal Fehler, die sich mir definitiv nicht erschliessen.
Folgende Funktion aus einer Subklasse von Window_Base:
(Mal mit den beiden Test-Ausgabe die zwischendurch drin waren)
Im initialize ist ganz am Schluss ein refresh drin. Der Funktioniert soweit gut, der Text wird im Fenster wunderbar angezeigt.
Wenn ich jetzt aber meinen Input drücke, der den Index ändert, funktioniert der refresh nicht.
self.contents.clear funktioniert. Das Fenster ist leer.
@index wird mir korrekterweise als 0 ausgegeben. - Wie auch anders, es wird aufgrund derzeitig fehlender Optionen modulo 1 gerechnet und gesetzt.
Die Strings werden mir auch bei jedem geplanten Aufruf von refresh ausgegeben. Ergo wird der case komplett ausgeführt.
Trotzdem ist nur der erste refresh erfolgreich.
Was mache ich zwischendurch?
Eigentlich nichts mit dem Fenster.
Es wird im initialize mit y=0 gecallt, und nach dem ersten refresh (im initialize) aus der Scene-Klasse auf y=352 gesetzt.
Ansonsten passiert damit vorm refresh nichts mehr ausser dem neuzuweisen von @index (per attr_writer).
Any Ideas? Aus dem Code selbst lässt kann ich den Fehler nicht herausnehmen.
Und ich hoffe mal schwer für mich dass es nicht so stupide wie beim letzten mal ist <.<°
Du zeichnest die Strings auf self.x und self.y. Du musst bei Zeichenoperationen aber von 0 ausgehen. Wahrscheinlich wird in initialize refresh aufgerufen bevor die Koordinaten gesetzt wurden. Damit sind self.x und self.y auf 0 und dein Inhalt wird angezeigt. Später ist das Fenster aber an einer anderen Position und damit stehen in self.x und self.y die Positionswerte des Fensters.
Wenn dein Fenster nun 100x100 groß ist und es sich an der Position 250/250 befindet so werden die Strings außerhalb des sichtbaren Bereichs des Fensters gezeichnet.
Danke The_Burrito. Wieso bin ich da nicht selbst drauf gekommen^^? Jeden Mist rumprobiert, aber nicht die Koordinaten mit 0 zu ersetzen, korrekt. Hätt ich vor allem nachschlagen können...
Ich sollte mir abgewöhnen so früh aufzugeben ^^.
Was macht dieses "self.contents.clear" überhaupt? Irgendwie hab ich das noch nicht so ganz verstanden. (Habs einfach mal bei refresh immer wieder eingebaut.)
Die Methode contents gibt das Bitmap (also die Grafik) zurück, welches den Inhalt des Fensters enthält. Die Methode clear löscht den Inhalt des Bitmaps (und damit indirekt auch den Inhalt des Fensters). Das self davor ist unnötig und kann weggelassen werden (es ist nur für self.contents = neues_bitmap nötig, da man sonst die Methode contents= nicht von einer lokalen Variable namens contents unterscheiden könnte).
*schulterzuck* theoretisch ja. Nach dem ichs 0230023909123 mal gelesen hab, schreib ich inzwischen immer self.contents, einfach weil..naja, dran gewöhnt oder so. Liest sich besser find ich. (vermutlich durch die farbliche hervorhebung von self)