PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Erledigt] [XP/RGSS] Nicht-sichtbare Sprite-Variablenänderungen



Todu
11.11.2011, 21:11
Ich hab ein Problem mit einem meiner Spriteupdates. Nach einer verschiebung eines Sprites soll dieser wenn entsprechende Angaben übergeben werden in der hue geändert sein. Das soll vorher schon stufenweise gemacht werden, ich hab jetzt oBdA mal nur den Abschlussschritt hier gepostet.
Alle variablen für die Änderungen sitzen (Sichtbar in Debugging-Ausgabe dieser), aber ich seh die Änderungen nicht auch optisch auf meinem Screen. Da funktioniert alles andere wie gehabt, allerdings seh ich keine hue-Änderung.
Ich hatte letztens ein ähnliches Problem - Sprites wollten nicht sichtbar werden, nachdem ich ihre opacity auf 255 gesetzt hab, obwohl sie visible waren und an ihrem richtigem Platz standen - und vor der opacity=0 Anweisung es auch wunderbar funktionierte. Wollte mich auch erst dafür an euch wenden, hab das aber Umgangen, in dem ich ein wenig umprogrammiert hab.

Hier mal der Auszug aus meiner nicht-Funktionierenden Klasse. Sie ist Subklasse von RPG::Sprite (wobei vermutlich Sprite gereicht hätte, aber warum nicht die Funktionen aus RPG::Sprite mitnehmen, vllt könnte man es ja gebrauchen).


def update
(...) #diverse Aktionen für Animationen
@zug_duration_akt -= 1 #Am schluss dieser: aktuelle duration dekrementieren
if @zug_duration_akt <= 0 #end effect
case @effect_type #Abschluss-Aktionen (Kontra Nachkomma-Bugs) je nach vorangegangener Animation-Aktion
(...) #die anderen beiden Animations-Aktionen
when "move"
self.x = @new_x
self.y = @new_y
if @new_hue != @old_hue #Braucht nicht neugeladen werden, wenn sich nichts getan hat, und das tut es selten.
self.bitmap.dispose #Hätt ich beinahe vergessen, dank KDs Tutorial aber einiges dazugelernt ^^.
self.bitmap=Bitmap.new("Graphics/Pictures/Kampf_CTB_Chars") #Grafik des Sprites neu laden
self.src_rect.set(rectox(pos), rectoy(pos), 62,27 ) #und neu ausschneiden
self.bitmap.hue_change(@new_hue) #auf die reloaded grafik den hue-change anwenden
end
p "old_hue= "+@old_hue.to_s #debug-ausgabe
p "new_hue= "+@new_hue.to_s #debug-ausgabe
@hue = @new_hue #aktuelle hue für spätere old_hue setzen (hm, sollte überlegen ob ich da ne redundante variable hab)
end
(...) #diverse variablen resets nach der ausführung von animationen
end
(...) #handling für Animations-Quoes
super
end

Und hier die Ausgabe der relevanten Sprites:


old_hue = 0
new_hue = 320

Stimmt also alles. Warum zum Teufel also seh ich davon nichts?

Danke im Vorraus für Antworten - in letzter Zeit verzweifel ich immer öfter an dem Ruby, was ich dachte inzwischen recht gut zu kennen. Ich merke stetig, wie sehr ich mich irre.

Grüße
Todu (ich denke ich gewöhn mich einfach an den Tippfehler im Nick - ausser mir kann jemand einen aktien Admin empfehlen. Den letzten den ich deshalb angeschrieben hab, hat sich kommentarlos nicht zurückgemeldet)

-KD-
12.11.2011, 00:27
Hm, du vergleichst irgendwie die beiden Variablen @hue und @old_hue, setzt am Ende aber die Variable @hue. Müsste die nicht auch @old_hue sein? Ansonsten seh ich da keinen Fehler. Statt Bitmap.new würde ich die Grafik aus dem RPG::Cache holen und per dup kopieren (spart den langsamen Festplattenzugriff). Aber so wie es da steht müsste es eigentlich funktionieren. Evtl. müsstest du mal die ganze Klasse posten. Versuch auch mal einen etwas eindeutigeren Hue-Wert. 0° und 320° sind ja fast dasselbe, da sieht man den unterschied evtl. gar nicht so deutlich.

Todu
12.11.2011, 01:08
Moin KD


setzt am Ende aber die Variable @hue. Müsste die nicht auch @old_hue sein?
Ja, siehe Comment. Hab beim Kommentieren meines Codes vorm posten erst gemerkt, dass die Variablen offenbar redundant sind - @old_hue holt vorher den Wert aus @hue. Werd das denk ich morgen mal umschreiben

@Cache:
Ja, gewöhn ich mir ab. Großteil meiner Scripte kommt aus ner Zeit wo ich mir mit recht wenig Vorkenntnissen Ruby und RGSS beigebracht hab, und daher ist mein Programmierstil nicht nur teilweise sehr unschön, so feinheiten wie aus dem Cache laden hab ich auch lange garnicht benutzt. Vermutlich kriegen meine Skills irgendwann ein roundup, wenn ich mich nicht grad mit anderen Dingen wie Bugfixing oder neuen Scripten deren Umsetzung mir im Kopf rumschwirrt beschäftigt bin. Tut es jetzt schon stellenweise wenn ich über alte Scriptteile lese und merke dass diese schnell und einfach verbessert werden können.


0° und 320° sind ja fast dasselbe, da sieht man den unterschied evtl. gar nicht so deutlich.
Ich hab vorher ein wenig mit den Werten herumexperimentiert, um rauszufinden welchen Grad ich eigentlich haben will, da hats wunderbar funktioniert, der Effekt ist sichtbar.

---Update

Nevermind! Meine Blödheit :D Und ich poste wegen sowas. Der Effekt IST sichtbar. Dummerweise hab ich nicht drüber nachgedacht, an welchem Bitmap ich das teste. Rumprobiert und den Sichtbaren Effekt erzeugt der einzige-NICHT-Dummy in der Datei aus der ich das Bitmap extrahiere. Alle anderen sind Schwarz-Weiss, und ich hatte dummerweise im Kopf, dass auch B/W davon betroffen ist - aufgrund von was anderem, was ich ich auch B/W change und regelmässig sehe, aber das is auch noch halb-opaque, und erzeuge dadurch den Pseudo-Farbeffekt. Problem gelöst, auf dem einzigen nicht-Dummy in Farbe funktionierts wunderbar, meine Dummheit.

Danke für deine Zeit :D