PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unbegreiflicher Return-Wert für "Plane.visible"



Cornix
13.04.2011, 15:53
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:

@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

@background_panorama.visible = true
verwende kann ich das Panorama sichtbar schalten, demnach muss ein Fehler bei dem Part

(@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.

-KD-
13.04.2011, 17:08
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:

class Plane
alias __set_visible visible=
attr_reader :visible
def visible= value
@visible = value
__set_visible value
end
end

Lösung 2:

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


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

Cornix
13.04.2011, 18:34
In Ordnung, verstehe.

The_Burrito
14.04.2011, 08:02
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.