| |
|
|
| Hi Frank!
Nun, ich habe wieder ein Problem. Ich bin gerade dabei eine Routine zu schreiben, die meine Sprites innerhalb eines Programms verwaltet. Ein Teil davon ist zuständig für das laden der BMPs und anschließendem Setzen der Sprites. Die Größe der Sprite-BMP wird berechnet aus der Summe der Spritehöhen und der Breite des breitesten Sprites. Soweit so gut. Wenn aber nun die Routine ein weiteres mal aufgerufen wird, soll die Sprite-BMP mit den neuen Sprite-Bild-Daten erweitert werden,sprich die neuen Daten werden angehängt. Ich kann nun zwar einfach die bestehenden Bild-Daten in ein neu erzeugtes,größeres ExtBMP kopieren und die neuen Daten zuladen, aber das verändert ja leider den Sprite-BMP-Handle, den ich mit InitSprite festgelegt habe. So bleibt mir nichts anderes übrig, als alle Sprites zu löschen und mit dem neuen Handle neu zu erstellen.
Meine daraus resultierende Frage: Ist es möglich die Dll um eine Funktion zu erweitern, die eine ExtBMP vergrößern, bzw. verkleinern kann? Oder/Und ist es möglich SetSpriteAnim mit einem weiteren Wert, dem Sprite-BMP-Handle, zu erweitern?
Mit den besten Grüßen, Mischa |
|
|
| |
|
|
|
| Hi Mischa,
Nun, ich habe wieder ein Problem. Ich bin gerade dabei eine Routine zu schreiben, die meine Sprites innerhalb eines Programms verwaltet. Ein Teil davon ist zuständig für das laden der BMPs und anschließendem Setzen der Sprites. Die Größe der Sprite-BMP wird berechnet aus der Summe der Spritehöhen und der Breite des breitesten Sprites. Soweit so gut. Wenn aber nun die Routine ein weiteres mal aufgerufen wird, soll die Sprite-BMP mit den neuen Sprite-Bild-Daten erweitert werden,sprich die neuen Daten werden angehängt. Ich kann nun zwar einfach die bestehenden Bild-Daten in ein neu erzeugtes,größeres ExtBMP kopieren und die neuen Daten zuladen, aber das verändert ja leider den Sprite-BMP-Handle, den ich mit InitSprite festgelegt habe. So bleibt mir nichts anderes übrig, als alle Sprites zu löschen und mit dem neuen Handle neu zu erstellen.
Warum verwendest du denn nicht von vornherein eine größere Bitmap, die dir in allen Fällen ausreicht? Dann kannst du die Sprites jederzeit mit CopyExtBmp() aktualisieren und in die Bitmap kopieren...
Meine daraus resultierende Frage: Ist es möglich die Dll um eine Funktion zu erweitern, die eine ExtBMP vergrößern, bzw. verkleinern kann?
Das geht leider nicht. Mir ist keine API bekannt, die das könnte, ohne den Handle dabei zu ändern.
Oder/Und ist es möglich SetSpriteAnim mit einem weiteren Wert, dem Sprite-BMP-Handle, zu erweitern?
Ich möchte die SetSpriteAnim() aus Kompatibilitätsgründen nicht verändern, kann aber gerne eine neue Funktion einbauen, z.B.: SetNewSpriteBitmap(spritehandle&,newspritehdc&)
Sinnvoller ist es aber trotzdem, die neuen Spritedaten einfach mit CopyExtBmp() in die Grafik zu setzen... Was hälst du davon?
Mit den besten Grüßen, Frank |
|
|
| |
|
|
|
| Nochmals Hallo!
Klar, ich könnte eine BMP anlegen die groß genug ist. Allerdings weiß ich nicht im Vorfeld wie groß diese sein müßte. Es ist wohl nicht besonders Resourcen-schonend, einfach eine BMP mit sagen wir 2000 x 4000 zu erstellen. Es sind ja noch andere BMPs im Spiel. Möglicherweise ist das aber auch unsinnig von mir zu glauben ich müßte Resourcen schonen. Beim Verkleinern ist das Problem schon deutlicher. Wenn ich die Daten eines Sprites entfernen will kann ich zwar den darunter gelegenen BMP-Bereich einfach um die Höhe der Sprite-Daten hochkopieren, dann haben die Sprites aber bis zum Setspriteanim falsche Daten. Wenn ich aber eine zweite Sprite-BMP in neuer Größe erzeuge, kann ich dort die BMP-Bereiche passend aneinander kopieren, dann die Sprites mit SetNewSpriteBitmap (vorausgesetzt dieser Befehl würde auch X u. Y-Koordinate der Sprite-Bild-Daten neu setzen) darauf umleiten und dann die alte Sprite-BMP lösche, und es gibt keine Fehler. Glaube ich!? Hm, ziemlich umständlich. Vermutlich braucht man diese Funktion nicht allzu häufig. Mein Problem habe ich auch schon mehr oder wenig gelöst, indem ich halt alle Sprites lösche und dann mit neuen Daten erneut setzte. Da es sich bei der Routine um eine Editor-Funktion handelt, kommt es ja nicht so sehr auf das Tempo an. Ich dachte nur, es würde möglicherweise Sinn machen bei einem Spiel... Naja, trotzdem danke für Deine schnelle Antwort!
Gruß, Mischa
PS: Wird es mal eine Funktion geben, wie CopySizedExtBmp? Dann kann man sich nämlich den Umweg über Startpaint -1 sparen |
|
|
| |
|
|
|
| Hallo Mischa,
Resourcen schonen ist doch immer sinnvoll.
Na ja, wenn du trotzdem noch mal so eine Funktion benötigst, dann melde dich halt wieder, auch mit neuer X und Y Angabe.
Ein CopySizeExtBmp()? Na wer weiß, ich werde mich bemühen euch das zu liefern, was ihr benötigt...
Gruß, Frank |
|
|
| |
|
|