Zwischen Frameindizes hin- und her (Pingpong)?
Übersicht

PacManiBetreff: Zwischen Frameindizes hin- und her (Pingpong)? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen,
ich habe z.B. ein Bild mit 8 Frames für eine Animation. Wenn die Animation einmal durchgelaufen ist, soll sie wieder zurücklaufen. Die Indizes der zu zeichnenden Frames würden also entsprechen: 0 1 2 3 4 5 6 7 6 5 4 3 2 1 [... und wieder von vorne]. Momentan merke ich mir in einer zweiten Variable neben dem zu zeichnenden Frameindex, ob die Zahl beim nächsten Tick hoch oder runter gezählt werden soll, ungefähr so: Code: [AUSKLAPPEN] If Hochzaehlen Then
If AktuellerFrame = AnzahlFrames - 1 Then Hochzaehlen = False Else AktuellerFrame = AktuellerFrame + 1 End If Else If AktuellerFrame = 0 Then Hochzaehlen = True Else AktuellerFrame = AktuellerFrame - 1 End If End If Aber das sind 13 Zeilen Code um einen solchen Pingpong-Effekt hinzukriegen. Geht das nicht auch leichter? Wie macht ihr das? |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist ja ziemlich egal da deine 13 Zeilen Code nicht wirklich belastend für den PC sind... aber ich habs mit weniger Code geschafft ![]() Lauffähiger Testcode: BlitzBasic: [AUSKLAPPEN] Graphics 400,300,0,2 Der eigentliche "Zähl-Teil" ist dabei nur 4 Zeilen lang ![]() BlitzBasic: [AUSKLAPPEN] AktuellerFrame = AktuellerFrame + step_var mfG, Christoph |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah super Idee.
Besser als einen Boolean zu benutzen. |
||
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
In der Annahme, dass die Bildchen nicht besonders groß sind und deren Laden nicht viel Speicher belegt, würde ich ja ganz einfach die Animationen aus den gewünschten 14 Frames zusammenstellen und das dann durchlaufen lassen - ist zwar keine Antwort auf deine Code-Frage, bräuchte aber keine extra if-Abfrage und ergäbe somit die höchste Geschwindigkeit. | ||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, das ist klar, dass das geht. Aber ich wollte das allgemein codetechnisch mal wissen, wie die optimale Lösung aussieht ![]() |
||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich würde es so machen:
BlitzBasic: [AUSKLAPPEN] Graphics 320,240 MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Idee finde ich sogar noch besser ![]() |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mist ![]() Ich hatte sowas immer über einen array mit indices gelöst und den einfach von 0 bis Len durchgezählt und ihren entsprechenden wert als frame verwendet. Der Eisvogel hats uns allen gezeigt *g* |
||
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
PhillipK hat Folgendes geschrieben: Mist
![]() Aber wieso denn? Dein Vorschlag ist doch gut. Sieht vielleicht nicht so doll aus, braucht aber (abgesehen vom mod) kein if und kein Abs und ist somit schneller und besser: BlitzBasic: [AUSKLAPPEN] Local f% Und mit BlitzMax sähe es sogar noch besser aus ![]() BlitzMax: [AUSKLAPPEN] Graphics 320,240 Außerdem ließe dieser Weg über bestimmte Indizes ja noch weitere beliebige Kombinationen zu, falls nötig ... |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mir gings um diese Zeile
BlitzBasic: [AUSKLAPPEN] If frame > 7 Then frame = frame - 14 Soweit hatte ich nie gedacht. ![]() Naja zugegeben, damit lassen sich auch diverse einzelbilder zu Animationen zusammenfrickeln (Beispiel: 2 Laufen-bilder und danach 5 "Springen" bilder, die perfekt anknüpfen aber total andere indices haben) - aber jede möglichkeit sollte auf ihren nutzen angepasst werden ![]() Ich weiß nicht, ob ein mod mehr oder weniger "rechenaufwand" betreibt, wie ein if, aber ist ja auch egal. Ist das problem nun gelöst? =) |
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Von Assembler her würde ich sagen, Mod ist aufwendiger als If. If ist ja nur CMP und Rumgespringe, Mod gibt's ja nicht direkt als ASM-Befehl, oder?^^
Aber Mod war ja eh nur für Animationen ohne Pingpong gedacht. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group