RGSS/Cache

Aus Scientia
Wechseln zu: Navigation, Suche

Erklärung

Über das Cache Modul, oder RPG::Cache (RGSS Version 1), kann man Grafiken aus dem Graphics Ordner des Projektes laden, wobei sie gecacht werden. Dadurch teilen sich mehrere Sprites das selbe Bitmap und wenn man zum Beispiel zwei Events mit der selben Grafik hat, muss diese nicht doppelt in den Speicher geladen werden sondern nur einmal.

Man kann auch ohne das Cache Modul Bilder laden, dies sollte man tun, wenn man die so erzeugten Bitmaps verändern will, zum Beispiel darauf zeichnen. Teilen sich nämlich mehrere Sprites das Bitmap auf das gezeichnet wird, zeigen alle das veränderte Bitmap an.

Beispiel

 @sprite = Sprite.new
 @sprite.bitmap = RPG::Cache.animation("Datei") #öffnet das bild
 @sprite.x = 10 #x coordinate (ausgehend von der oberen linken ecke)
 @sprite.y = 10 #y coordinate (ausgehend von der oberen linken ecke)
 @sprite.dispose #löscht das bild wieder

Parameter

Parametername Typ Beschreibung
filename String Name der Grafikdatei im jeweiligen Ordner
hue 0 bis 255 Gibt die Färbung der Grafik an, (kann man auch mit dem Regler in den Events bei den Grafiken einstellen)

Folgende Methodenaufrufe sind möglich:

RPG::Cache.animation(filename, hue)     # Lädt eine Grafik aus dem Ordner Graphics/Animations/
RPG::Cache.autotile(filename)           # Lädt eine Grafik aus dem Ordner Graphics/Autotiles/
RPG::Cache.battleback(filename)         # Lädt eine Grafik aus dem Ordner Graphics/Battlebacks/
RPG::Cache.battler(filename, hue)       # Lädt eine Grafik aus dem Ordner Graphics/Battlers/
RPG::Cache.character(filename, hue)     # Lädt eine Grafik aus dem Ordner Graphics/Characters/
RPG::Cache.fog(filename, hue)           # Lädt eine Grafik aus dem Ordner Graphics/Fogs/
RPG::Cache.gameover(filename)           # Lädt eine Grafik aus dem Ordner Graphics/Gameovers/
RPG::Cache.icon(filename)               # Lädt eine Grafik aus dem Ordner Graphics/Icons/
RPG::Cache.panorama(filename, hue)      # Lädt eine Grafik aus dem Ordner Graphics/Panoramas/
RPG::Cache.picture(filename)            # Lädt eine Grafik aus dem Ordner Graphics/Pictures/
RPG::Cache.tileset(filename)            # Lädt eine Grafik aus dem Ordner Graphics/Tilesets/
RPG::Cache.title(filename)              # Lädt eine Grafik aus dem Ordner Graphics/Titles/
RPG::Cache.windowskin(filename)         # Lädt eine Grafik aus dem Ordner Graphics/Windowskins/
RPG::Cache.tile(filename, tile_id, hue) # Lädt ein einzelnes Tile aus einer Tilesetgrafik
RPG::Cache.clear                        # Leert den Cache

Ausgenommen der clear Methode, liefern alle Anderen eine Bitmapinstanz zurück.

Quellcode

Die Klasse ist im RGSS1 folgendermaßen definiert:

module RPG
  module Cache
    @cache = {}
    def self.load_bitmap(folder_name, filename, hue = 0)
      path = folder_name + filename
      if not @cache.include?(path) or @cache[path].disposed?
        if filename != ""
          @cache[path] = Bitmap.new(path)
        else
          @cache[path] = Bitmap.new(32, 32)
        end
      end
      if hue == 0
        @cache[path]
      else
        key = [path, hue]
        if not @cache.include?(key) or @cache[key].disposed?
          @cache[key] = @cache[path].clone
          @cache[key].hue_change(hue)
        end
        @cache[key]
      end
    end
    def self.animation(filename, hue)
      self.load_bitmap("Graphics/Animations/", filename, hue)
    end
    def self.autotile(filename)
      self.load_bitmap("Graphics/Autotiles/", filename)
    end
    def self.battleback(filename)
      self.load_bitmap("Graphics/Battlebacks/", filename)
    end
    def self.battler(filename, hue)
      self.load_bitmap("Graphics/Battlers/", filename, hue)
    end
    def self.character(filename, hue)
      self.load_bitmap("Graphics/Characters/", filename, hue)
    end
    def self.fog(filename, hue)
      self.load_bitmap("Graphics/Fogs/", filename, hue)
    end
    def self.gameover(filename)
      self.load_bitmap("Graphics/Gameovers/", filename)
    end
    def self.icon(filename)
      self.load_bitmap("Graphics/Icons/", filename)
    end
    def self.panorama(filename, hue)
      self.load_bitmap("Graphics/Panoramas/", filename, hue)
    end
    def self.picture(filename)
      self.load_bitmap("Graphics/Pictures/", filename)
    end
    def self.tileset(filename)
      self.load_bitmap("Graphics/Tilesets/", filename)
    end
    def self.title(filename)
      self.load_bitmap("Graphics/Titles/", filename)
    end
    def self.windowskin(filename)
      self.load_bitmap("Graphics/Windowskins/", filename)
    end
    def self.tile(filename, tile_id, hue)
      key = [filename, tile_id, hue]
      if not @cache.include?(key) or @cache[key].disposed?
        @cache[key] = Bitmap.new(32, 32)
        x = (tile_id - 384) % 8 * 32
        y = (tile_id - 384) / 8 * 32
        rect = Rect.new(x, y, 32, 32)
        @cache[key].blt(0, 0, self.tileset(filename), rect)
        @cache[key].hue_change(hue)
      end
      @cache[key]
    end
    def self.clear
      @cache = {}
      GC.start
    end
  end
end


Verwandte Themen