Zitat Zitat von -KD- Beitrag anzeigen
Hm, du müsstest mal die ganze Scene zeigen. Prinzipiell scheint es so zu sein, dass Window_Message sich beim Starten alle Texte, die in Game_Message abgelegt sind, holt und die dann zeichenweise zeichnet. Wenn währendessen Game_Message verändert wird, hat das keinen Einfluss mehr auf Window_Message. Wenn Window_Message mit dem Schreiben fertig ist, löscht es den Inhalt von Game_Message. Erst danach kannst du Game_Message mit neuem Inhalt füllen.
Die Scene ist relativ groß, und nur sehr wenig hat mit der Message zu tun. Ich habe vorerst darauf zurückgegriffen das Window für jede neue Nachricht neu anzulegen. Funktioniert, ist aber nicht sonderlich hübsch.

Hier ein paar Auszüge aus der Window_Message Klasse.

Im Initialize wird nichts mit dem Text angestellt, daher gehe ich davon aus, dass man es eigentlich nicht neu initialisieren muss um einen neuen Text darstellen zu können.

Das Problem ist nur, die Stelle zu finden wo genau etwas mit dem Text gemacht wird. Denn das ist im VX sehr umständlich gelöst und man verfolgt den Code auf der Suche nach der @text-Referenz um zwanzig Ecken.
Soweit ich den Code analysieren konnte muss lediglich die Game_Message Instanz bearbeitet werden und dann die Update-Methode des Message_Window gerufen werden. Das funktioniert jedoch leider nicht so ganz.

Den Schluss hatte ich aus dem Update gezogen welches nämlich wie folgt aussieht:

Da steht so schön in einer Zeile:
Code:
elsif continue?                       # If continuing
        start_message                         # Start message
        open                                  # Open window
        $game_message.visible = true
Das Continue ist definiert als:
Code:
def continue?
    return true if $game_message.num_input_variable_id > 0
    return false if $game_message.texts.empty?
    if self.openness > 0 and not $game_temp.in_battle
      return false if @background != $game_message.background
      return false if @position != $game_message.position
    end
    return true
  end
Was nach meinen Eingaben in die Game_Message true liefern sollte.
Und demnach das Start_Message:
Code:
def start_message
    @text = ""
    for i in 0...$game_message.texts.size
      @text += "    " if i >= $game_message.choice_start
      @text += $game_message.texts[i].clone + "\x00"
    end
    @item_max = $game_message.choice_max
    convert_special_characters
    reset_window
    new_page
  end
Wo wir nun auch endlich unseren Text geladen bekommen.
Und wie wir bereits im Update gesehen haben wird der Text gezeichnet unter der Vorraussetzung dass:
Code:
elsif @text != nil                    # More text exists
        update_message
Weshalb ich wirklich sehr verdutzt bin warum es so nicht funktionieren sollte.

Zitat Zitat von Inflater Beitrag anzeigen
Und pampig werden ist auch keine Lösung. Vor allem wenn jemand seine Zeit opfert, um Dein Problem zu lösen. Solltest Du mal drüber nachdenken.

Davon mal abgesehen: Wenn ich Deinen Code repliziere – egal ob mit erster Zeile oder ohne – und in der Text-Ausgabe verändert in mehrere Events packe (zum Beispiel »Test 1«, »Test 2«, »Test 3«), dann wird genau diese Texte immer angezeigt. Egal wie viele andere Events dazwischen vorkamen.

Benutzt Du Dein Code-Schnipsel in einem anderen Objekt oder direkt in einem Event? Oder kann es sein, dass ich den »VX Ace« benutze, Du aber den »VX« (ohne »Ace«)?

Wie immer,
The Inflater
Ich glaube du scheinst nicht sonderlich zu verstehen was ich da getan habe. Bitte lerne dich lieber etwas genauer in die Materie ein.
Events kommen in meinem Projekt garnicht vor, die Engine (dieser speziellen Szene) ist von Grund auf (bis auf eben die Ausnahme des Message-Scriptes aus Kompatibilitätsgründen) selbst in Ruby gescriptet.
Das du deine Zeit "geopfert" hast ist schön und gut, ist auch sehr redenswert von dir aber hilfreich war es nunmal nicht, dass muss man einsehen, auch wenn es gut gemeint sein mag.