CopySprite macht mein Sprite kaputt

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

CopySprite macht mein Sprite kaputt

Beitrag von Sven »

Ich erstelle zwei Sprites mit #PB_Any und weise die IDs sp2Dnew und sp2Dold zu. Die Sprites sollen während des gesamten Programm immer wieder verwendet werden.

Dann zeichen ich auf eines der Sprites, und dann soll dieses Sprite in das zweite kopiert werden. Dabei wird mein erstes Sprite ungültig.

Code: Alles auswählen

Debug sp2Dnew
Debug IsSprite(sp2Dnew)
DisableDebugger
      CopySprite(sp2Dnew, sp2Dold, #PB_Sprite_AlphaBlending)  ;neues Bild in altes kopieren, Handle übergeben
EnableDebugger
Debug sp2Dnew
Debug IsSprite(sp2Dnew)
ergibt

11335104
11335104
11335104
0

Wieso macht CopySprite mein Quellsprite kaputt? Ich will die Sprites eigentlich nicht immer wieder freigeben und neu erstellen, sondern schon den einmal zugewiesenen Speicher nutzen.

Wenn ich den Debugger nicht vor dem CopySprite abschalte, kommt eine Meldung "Objektnummer sehr hoch". Ja, Kunststück, bei #PB_Any ist das nunmal so.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CopySprite macht mein Sprite kaputt

Beitrag von STARGÅTE »

Nun, auch wenn du die gleiche Nummer übergibst, gibt PB das Sprite erst frei und erstellt dann ein neues, mit der hohen Nummer.

So, nun gibt PB die Fehlermeldung aber nicht ohne Grund aus.
Wenn du nun ein Any-Nummer als neue SpriteNummer übergibst, erstellt PB ein Array mit allen Indizes bis zu dieser Nummer, weil es ja annehmen muss, dass du eigene Konstanten angelegt hast, bis 11335104 oder höher.
Da nun vllt dein neues Sprite ein kleineren Any wert bekommen hat, wie Old-Sprite, sucht er bei New-Sprite vergeblich in Index-Array nach einem gültigen Sprite.

Also entweder echte Konstanten nutzen, oder wieder mit PB_Any arbeiten und sp2Dold überschrieben, nachdem du sp2Dold freigegeben hast.
Wie gesagt, das macht PB ohne hin, wenn du eine Nummer übergibst, die bereits existiert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Re: CopySprite macht mein Sprite kaputt

Beitrag von Sven »

Hm, klingt logisch, ist aber blöd. Ich dachte, der kopiert einfach den Speicherinhalt des einen Sprites in den Speicher des anderen Sprites, ohne das Sprite neu zu erstellen. Dazu müßte er aber wirklich feststellen, daß das neue Sprite bereits existiert...

Erklärt aber nicht, warum das ursprüngliche Sprite dabei ungültig wird. Es hat auch schon so funktioniert, aber mit nummerierten Konstanten anstelle der per PB_Any erzeugten IDs.

Ich machs jetzt anders: Da ich den Inhalt des Quellsprites eh neu erstelle, tausche ich einfach die IDs gegeneinander, sodaß jedes Sprite wechselweise als Neues oder Altes geneutzt wird.

Hintergrund ist, daß ich ein Bild anzeigen, dieses dann langsam auf ein anderes Bild überblenden will, also eine Diashow mit Überblendeffekt.
Antworten