Ergebnis 1 bis 4 von 4

Thema: Hab ein kleines Problem mit einem Ruby-Script...

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Hmpf, liegt am Mirrorscript. Eigentlich gibt es im Maker 'ne strikte Trennung zwischen Grafik und Spielmechanik. Das Mirrorscript hält diese Trennung nicht ein, was zu dem Fehler führt.

    Das Problem ist, denke ich, folgendes:
    - Das Mirrorscript schreibt eine variable mirror in die $game_map Objekt. Diese Variable mirror zeigt auf eine Grafik (und das ist, wie oben bereits gesagt, ziemlich schlechter Skriptingstil. Grafiken gehören in Klassen die Grafiken kontrollieren, z.B. Spriteset_Map)
    - Beim Abspeichern wird auch $game_map Objekt abgespeichert. Hier das Problem: Man darf keine Grafiken abspeichern (wäre ja auch reichlich sinnlos. Stell dir vor dein Projekt würde beim Speichern sämtliche Sound- und Grafikdateien mit abspeichern. Dann wäre jeder Spielstand nochmal so groß wie das ganze Projekt). Darum sorgt das Mirror-Script dafür, dass das mirror Objekt wieder entfernt wird
    - Nach Abspeichern existiert das Mirrorobjekt nicht mehr --> Fehlermeldung
    - normalerweise speicherst du in einem Extra Speichermenü ab. Dort wird, nach beenden des Menüs, das Mirrorobjekt sowieso wieder neu erzeugt. Das ist hier eben nicht der Fall.

    Die sinnigste Lösung wäre natürlich, dass Mirror-Script so umzuschreiben, dass die mirror-Variable nicht mehr in der Game_Map Klasse liegt. Nun weiß ich nicht ob du das ganze Mirror-Script gepostet hast, oder da noch was fehlt. Es ist schwer einzuschätzen was für Auswirkungen eine solche Änderung hätte. Eine etwas leichtgewichtigere Änderung wäre:

    Code:
    class Spriteset_Map
      # HIER gehört das Mirror Objekt rein *rolleyes*
      attr_reader :mirror
      alias update_without_mirror update
      def update
        @mirror ||= Sprite_Mirror.new(@viewport1)
        update_without_mirror
      end
      
      alias dispose_mirror dispose
      def dispose
        @mirror.dispose
        dispose_mirror
      end
    end
    class Sprite_Character
      # lösche den Unsinn der vorher dastand
      alias initialize mirror_initialize
      remove_method :mirror_initialize
    end
    class Scene_Save < Scene_File
      # lösche den Unsinn der vorher dastand
      alias write_save_data mirror_write_save_data
      remove_method :mirror_write_save_data
    end
    class Spriteset_Map
      # lösche den Unsinn der vorher dastand
      alias initialize mirror_map_initialize
      remove_method :mirror_map_initialize
    end
    class Game_Map
      # blöder Hack um das halbwegs zu bereinigen, ohne das
      # Script umschreiben zu müssen
      def mirror
        if $scene.kind_of?(Scene_Map) then
          $scene.instance_variable_get(:@spriteset).mirror
        else
          nil
        end
      end
      remove_method :mirror=
    end
    Unter das Mirror-Script einfügen und hoffen das es funktioniert.

    Geändert von -KD- (11.12.2008 um 12:43 Uhr) Grund: Kleiner Schreibfehler korrigiert

Berechtigungen

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