Ergebnis 1 bis 5 von 5

Thema: Darstellungsbereich von Planes erweitern?

  1. #1

    Darstellungsbereich von Planes erweitern?

    Guten Abend, heute habe ich ein wirklich besonderes Problem mit Planes.

    Ich verwende ein Script um das Spielfenster beliebig zu vergrößern oder zu verkleinern. Ich habe auch prompt von dieser Funktion gebrauch gemacht und die Auflösung auf 800x600 geändert.
    Was ich nur leider nun feststellen muss ist, dass die RGSS standardklasse Plane immer nur einen Bildausschnitt von 640x480 liefert. Kann man diese Limitation auf irgendeinem Weg umgehen? Ich würde sehr gerne ein Plane über die volle Fenstergröße darstellen.

    Ich danke sehr für alle Antworten.

  2. #2

    Doktor von Stein Gast
    Ist das Problem auch mit der Map?
    Wenn ja, ändere den Viewport.
    Wenn nein, zeig uns mal bitte das Script dass du nimmst.

  3. #3
    Nein, das Problem liegt lediglich bei Planes. Alles andere wird korrekt angezeigt.

    Das Script wurde ursprünglich von jemandem names Selwyn geschrieben, ich fand es im Internet, habe es allerdings seitdem stark verändert um es meinen Bedürfnissen anzupassen.


  4. #4
    die mitgelieferten planes können leider nur innerhalb des bereiches dargestellt werden, den das fenster normal abdeckt. das ist selbst dann so, wenn der viewport außerhalb liegt.
    die einzige möglichkeit besteht wohl darin, die plane klasse mithilfe von sprites nachzuschreiben.
    ich hab das mal gemacht:

    Code:
    class Plane
      attr_reader :bitmap
      attr_reader :ox
      attr_reader :oy
      attr_reader :z
      attr_reader :zoom_x
      attr_reader :zoom_y
      attr_reader :opacity
      attr_reader :blend_type
      attr_reader :tone
      
      def initialize(viewport=Viewport.new(0,0,480,640))
        @sprites = {}
        @viewport = viewport
        @bitmap = nil
        @z = @ox = @oy = 0
        @zoom_x = @zoom_y = 1.0
        @opacity = 255
        @blend_type = 0
        @tone = Tone.new(0,0,0,0)
        @color = Color.new(0,0,0,0)
      end
      
      def dispose
        @sprites.each{|k,v| v.dispose}
      end
      
      def bitmap=(bit)
        return if @bitmap == bit
        @bitmap = bit
        refresh
      end
      
      def refresh
        bit = @bitmap
        self.dispose
        unless bit.nil?
          for x in 0...((self.width / bit.width * @zoom_x).to_i + 2)
            for y in 0...((self.height / bit.height * @zoom_y).to_i + 2)
              @sprites[[x,y]] = Sprite.new(@viewport)
              @sprites[[x,y]].bitmap = bit
              @sprites[[x,y]].x = x * bit.width * @zoom_x
              @sprites[[x,y]].y = y * bit.height * @zoom_y
              @sprites[[x,y]].zoom_x = @zoom_x
              @sprites[[x,y]].zoom_y = @zoom_y
              @sprites[[x,y]].z = self.z
              @sprites[[x,y]].tone = @tone
              @sprites[[x,y]].blend_type = @blend_type
              @sprites[[x,y]].color = @color
              @sprites[[x,y]].opacity = @opacity
            end
          end
        end
      end
      
      def ox=(n)
        return if @ox == n
        @ox = n
        n = n / @zoom_x
        @sprites.each{|k,v|
        v.ox = n % v.bitmap.width
        }
      end
      
      def oy=(n)
        return if @oy == n
        @oy = n
        n = n / @zoom_y
        @sprites.each{|k,v|
        v.oy = n % v.bitmap.width
        }
      end
      
      def z=(n)
        return if @z == n
        @z = n
        @sprites.each{|k,v|
        v.z = n
        }
      end
      
      def width
        return @viewport.rect.width
      end
      
      def height
        return @viewport.rect.height
      end
      
      def zoom_x=(n)
        return if @zoom_x == n
        @zoom_x = n
        refresh
      end
      
      def zoom_y=(n)
        return if @zoom_y == n
        @zoom_y = n
        refresh
      end
      
      def opacity=(n)
        return if @opacity == n
        @opacity = n
        @sprites.each{|k,v|
        v.opacity = n
        }
      end
      
      def blend_type=(n)
        return if @blend_type == n
        @blend_type = n
        @sprites.each{|k,v|
        v.blend_type = n
        }
      end
      
      def tone=(t)
        return if @tone == t
        @tone = t
        @sprites.each{|k,v|
        v.tone = t
        }
      end
      
      def color=(c)
        return if @color == c
        @color = c
        @sprites.each{|k,v|
        v.color = c
        }
      end
    end

  5. #5
    Sehr freundlich von dir, allerdings habe ich mir bereits damit beholfen die Plane-Klasse selbst, oder zumindest in dem von mir benötigten Maßstab, nach zu modelieren.

    Das Problem ist praktisch somit für mich erledigt, es blieb die Neugierde ob es sich dabei um eine Limitation von RGSS handelt oder um sonstetwas. Oder ob es nicht einen einfachen Weg gäbe dieses Limit zu umgehen.

Berechtigungen

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