Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

12.12.2006, 18:08

Kpitel 12: SDL-Spiel: Größe der Grafiken zur Laufzeit ändern

Hallo,
da ich jetzt fertig mit dem Buch bin, wollte ich es erweitern, wie empfohlen. Und da habe ich mir gedacht, man könnte unter anderem eine Superwaffe einbauen, bei der sich eine Laserschockwelle kreisförmig vom Raumschiff aus ausbreitet und alle Asteroiden, auf die sie trifft, vernichtet.
Jetzt wäre es ja eigentlich ziemlich blödsinnig, dafür ein animiertes Sprite zu erstellen, die Bitmap würde ja viel zu groß werden. Einfacher wäre es, wenn man die Grafik der Schockwelle aller 0,2 Sekunden (z.B.) um einen bestimmten Wert vergrößern könnte. Und genau das ist mein Problem. Ich habe keine Variable gefunden, mit der das geht. Ich glaube herausgefunden zu haben (korrigiert mich, wenn ich falsch liege), dass ich mit "mRect.w" und "mRect.h" nur die Größe des Sprites ändern kann, aber nicht die der Grafik, der Rest des Sprites bleibt einfach transparent. Naja, jedenfalls hat mir das nichts gebracht. Dann habe ich noch versucht "m_pImage.w"/"m_pImage.h" zu verändern (da steht zwar was von "read-only", aber einen Versuch war es ja wert). Dadurch wurde das Bild zwar jetzt verändert, allerdings nicht vergrößert, sondern wenn mein festgelegter Wert größer als der originalwert war, wurde einfach die gleiche Grafik nochnmal daneben gelegt.

Wie also kann ich diese Grafiken skalieren?

Den Quellcode habe ich, abgesehen von meinen missglückten Tests, noch nicht geändert (ich wollte erst die Grafiken erstellen), deswegen habe ich ihn nicht reingestellt. Wenn ichs doch tun soll, sagt es.

Danke schonmal im Voraus :)

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

13.12.2006, 08:26

erstell doch einfache einzelne sprites welche sich ausbreiten...

3

13.12.2006, 14:59

Werde ich tun, wenn das mit der Größe nicht klappt.
Ich hab eben bloß gedacht, dass es da 2 simple Variablen/Funktionen gibt, mit denen man Breite und Höhe einfach festlegen kann.

Dofter

Treue Seele

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

4

13.12.2006, 19:10

Wenn du ein Sprite benutzt musst du es Skalieren.
Diesen Skalierungsvektor musst du dann ein der Draw Methode übergeben.

(NeueBreite = AlteBreite * vScale.x; macht aber DirextX Automatisch beim zeichnen)
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

5

13.12.2006, 19:14

Hm, ich benutz da aber gar kein DirectX, sondern die SDL (DirectX wird in dem Buch garnicht behandelt).

Gibt es dafür vielleicht eine lösung?

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

6

13.12.2006, 22:09

@Dofter :roll:

@samuglo

Du kannste den Surfaces schon Breite und Höhe ändern, nur leider wirkt sich das nicht auf das Bild aus, SDL selber hat keine Skalierungsfunktionen eingebaut.

Dafür gibts die SDL_gfx-library

Ich selber hab bis jetzt nur mal kurz damit etwas gemacht, aber es macht nen guten Eindruck..

Wenn du bei Google ein wenig suchst und english dich nicht allzu sehr abschreckt sollte es damit kein Problem sein, ausserdem sind bereits beim Download-Paket ein paar gute und einfache Beispiele dabei.

Gruss Beneroth

7

14.12.2006, 15:23

Danke, ich werds mal ausprobieren :)

Werbeanzeige