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

valentin

Treue Seele

  • »valentin« ist der Autor dieses Themas

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

1

25.02.2011, 15:40

Animation in Allegro

Hallo allerseits ;)

Wie der Titel schon vermuten lässt, hab' ich ne Frage zu Animationen mit der GraphikLib "Allegro". Der eine oder andere hat eventuell mein Spiel mal angespielt, welches ich hier auch vorgestellt habe. Der Hauptcharakter soll jedoch animiert werden. (Evtl. auch noch andere Sachen). Hierzu hab' ich jedoch ne Frage:

Wie mache ich das am schlausten?

Ich bezweifle mal, dass man jeden "Status" des Charakters als Bild erstellt, und dieses dann in der jewieiligen Situation anzeigen lässt. Das wäre irgendwie unschön (da man massenhaft Bilder nur für den Charakter laden muss), und auch sehr unpraktisch. Gibts da irgend nen Trick, oder muss man das wirklich so machen, wie ich oben beschrieben habe?

Danke schon im Voraus :D
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

25.02.2011, 16:10

Stichwort Spritesheet. Dieses Bild hast du, und dazu einen Richtungs Vektor der angibt in welche Richtung dein Spieler sich bewegen soll (ein Tupel oder ein short[2] array boten sich da an). Je nachdem, ob dein Spieler hoch geht (y = -1) oder runter (y = 1) bzw. nach rechts (x = 1) oder links (x = -1) blittest du die jeweilige Reihe deines Spritesheets.
Wenn die Reihen nicht passend angeordnet sind, kannst du dies durch entsprechende Konstanten beheben (Auf Nachfrage dazu mehr :D).
Die Animation des Gehens bekommst du hin, indem du alle paar ticks (frames) eine (interne) Variable erhöhst (z.B. mit einer extra Variable _speed) und somit Schrittweise die einzelnen Positionen durchgehst/blittest.
Bps. Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void update() {
        if (!this._move || !this._drawable) {
            return;
        }

        this._update += this._speed;
        while (this._update >= 1.0) {
            this._update--;

            this._inc_frame(1);

            this.push(this._dir.x, this._dir.y);
        }
    }

    protected void _inc_frame(in byte inc) {
        this._current_frame += inc;

        if (this._current_frame >= this._cols) {
            this._current_frame = 0;

            if (this._rows > 1) {
                this._current_dir += 1;

                if (this._current_dir >= this._rows) {
                    this._current_dir = 0;
                }
            }
        }
    }


_current_dir ist hierbei die Zeile des Spritesheets, _current_frame der aktuelle Bildausschnitt dieser Zeile (also die Spalte).
_cols bzw. _rows wären dann die maximale Höhe (hier 4) und Breite (ebenfalls 4).

Wie du den Teilausschnitt nun renderst ist sehr einfach: einfach den Ausschnitt ausschneiden und dann für das blitten benutzen, etwa so:

C-/C++-Quelltext

1
2
3
4
5
Rect rect = new Rect(
                    (this._current_frame * this._width),
                    (this._current_dir * this._height),
                    this._width, this._height
                );
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

valentin

Treue Seele

  • »valentin« ist der Autor dieses Themas

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

3

25.02.2011, 16:28

Danke für die schnelle und hilfreiche Antwort.

Wenn ich mir das so überlege, ist das eigentlich sehr einleuchtend :D

Valentin
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Werbeanzeige