Ergebnis 1 bis 4 von 4

Thema: Unbegreiflicher Return-Wert für "Plane.visible"

  1. #1

    Unbegreiflicher Return-Wert für "Plane.visible"

    Guten Tag, ich habe ein sehr kleines Problem und ich neige dazu dies als Bug des RGSS abzustempeln.

    Ich habe ein Plane-Objekt erzeugt um ein Bitmap anzeigen zu lassen und will diese Plane nun von sichtbar zu unsichtbar und anders herum schalten mit jedem Mal, dass der Nutzer einen Button drückt.
    Für den Code verwende ich also:
    Code:
    @background_panorama.visible = (@background_panorama.visible==false)
    Allerdings ist das Panorama nach der ersten Benutzung immer unsichtbar.

    Ich habe also ein wenig herum experimentiert, falls ich
    Code:
    @background_panorama.visible = true
    verwende kann ich das Panorama sichtbar schalten, demnach muss ein Fehler bei dem Part
    Code:
    (@background_panorama.visible==false)
    liegen.
    Ich lies mir also "@background_panorama.visible" via "print()" ausgeben und ich habe festgestellt, dass es immer "true" zurück gibt, egal ob das Panorama sichtbar ist oder nicht.

    Ist dies ein bekannter Fehler? Gibt es einen Weg dies zu umgehen ohne eine separate Variable einzuführen welche die Sichtbarkeit des Panoramas überwacht?

    Vielen Dank.
    Cornix.

  2. #2
    Scheint sich tatsächlich um einen Bug zu handeln. Entweder überschreibst du die visible und visible= Methode oder du wrappst den Plane in einen Viewport.

    Lösung 1:
    Code:
    class Plane
      alias __set_visible visible=
      attr_reader :visible
      def visible= value
        @visible = value
        __set_visible value
      end
    end
    Lösung 2:
    Code:
    v = Viewport.new(0, 0, 640, 480)
    plane = Plane.new(v)
    v.visible = !v.visible
    p v.visible #=> false
    v.visible = !v.visible
    p v.visible #=> true
    Zitat Zitat
    Ist dies ein bekannter Fehler?
    Mir war er nicht bekannt. Aber mittlerweile kann ich die Bugs in der RGSS auch nicht mehr zählen, so zahlreich sind die X_x

  3. #3
    In Ordnung, verstehe.

  4. #4
    Eventuell könnte es daran liegen, dass visible zu Beginn nicht false, sondern nil ist. Für die Auswertung von if Statements zählt nil genau so wie false. Darum kann man auch if @background_panorama.visible abfragen und es hat den selben effekt wenn es nil oder false ist. Ein Vergleich nil == false führt allerdings zu false, da nil sich für Bedingungen zwar verhält wie false, aber natürlich trotzdem ein anderer Wert ist. Für so einen Schaltermechanismus könntest du doch auch einfach @background_panorama.visible = !@background_panorama.visible verwenden.

Berechtigungen

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