Zitat:
funktioniert jetzt (wenn ich es ans ende des scripts setze werden keine Bilder angezeigt), da es ja ein Skill-menü ist wird es bei jedem Tastendruck aktualisiert bzw. neu aufgerufen. Somit ja auch die Skillpunkte-Bilder, denn es könnte sich ja etwas verändert haben.
Die Bilder werden jedoch immer nocheinmal aufgerufen (also wenn ich oft die Taste drücke habe ich viele Skillpunkte übereinander), ich weis noch nicht warum hier das dispose versagt.
Das ist schon der richtige Ansatz. Kannst du mal deinen Programmcode zeigen, dann sehe ich vielleicht warum es nicht funktioniert?
Zitat:
Die Bilder werden jedoch immer nocheinmal aufgerufen (also wenn ich oft die Taste drücke habe ich viele Skillpunkte übereinander), ich weis noch nicht warum hier das dispose versagt.
/Edit: Denke ich weis warum... es wird immer nur "sprite" disposed nicht @sprites welches das Bild letztendlich trägt.
Wenn du alle Sprites in dem Array disposed, sollten sie danach nicht mehr zu sehen sein.
Mal ins blaue geraten: Dein "aktualisieren" läuft so ab, dass du jedes Mal ein neues Skillmenü mit Sprite_SheetPictures.new anzeigst. Da das Disposen aber nur beim Aufruf der refresh Methode passiert und die refresh Methode deines vorherigen Sprite_SheetPictures nicht nochmal aufgerufen wird, hast du dann zwei Menüs. Aus dem Grund sollte dein Menü selbst auch noch eine dispose Methode haben:
Code:
class Sprite_SheetPictures < Sprite
# ...
def dispose
@sprites.each {|sprite| sprite.dispose}
@sprites.clear
end
end
Die solltest du aufrufen, wenn du dein Menü ausblenden willst.
Aber es ist nicht nötig bei jedem "Aktualisieren" des Menüs ein neues Menü anzuzeigen. Ruf doch einfach die refresh Methode von neuem auf.
Code:
[EVENTCODE]
[SCRIPT] @skill_menu = Sprite_SheetPictures.new
[LOOP]
[CONDITIONAL BRANCH: Taste gedrückt]
[irgendwelche Änderungen an deinen Skills]
[SCRIPT] @skill_menu.refresh
[END LOOP]
[SCRIPT] @skill_menu.dispose
[SCRIPT] @skill_menu = nil
Zitat:
was ich aber meine ist @sprites ist ja eine lokale variable, ich hatte vorher immer globale Variablen genutzt, dann konnte ich einfach in einem Event ein Script aufrufen und [...] Mit den lokalen @ Variablen geht das ja denke ich nicht
Achtung: @ ist eine
Instanzvariable, nicht lokal. Die Idee dahinter ist, dass du die "internen" Eigenschaften deines Menüs nicht von außen manipulieren kannst und musst. Es gibt gar keinen Grund ein einzelnes Bild im Skillmenü in einem Eventscript zu verändern oder auszublenden. Das Skillmenü sollte seine Bilder selbst verwalten. Du sagst z.B. nur dem Skillmenü "aktualisiere dich" und das Skillmenü sorgt selbst dafür, dass seine Grafiken entfernt, ausgewechselt oder geändert werden.
btw. wenn deine Variable als Instanzvariable in einem Event definiert wird, kannst du sie im selben Event (evtl. auch in anderen Events - kommt auf den Eventtyp an) wieder verwenden.
Zitat:
PS: Was ist so böse an Globalen Variablen?^^
Es gibt viele Nachteile: Sie können Speicherlecks erschaffen, es können Namenskonflikte auftreten, sie werden nicht automatisch abgespeichert (wodurch beim Neuladen Informationsverluste auftreten können). Der Hauptpunkt ist aber, dass sie zu einem schlechten Programmierstil führen. In der Objektorientierten Programmierung versucht man seine Daten und Programmfunktionen zu strukturieren bzw. zu
kapseln. Da globale Variablen keinerlei Hierarchie oder Strukturierung kennen, ist das damit nicht möglich.