Fehler bei einer Animationsanzeige ;-)...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

joachim_neu

Betreff: Fehler bei einer Animationsanzeige ;-)...

BeitragMi, Jun 23, 2004 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
also, ich progge gerade ein Spiel, bei dem sich die figur auf einem tilemap bewegen soll. hier ist der code für das gehen der figur um einen schritt in die gegebene richtung:

Code: [AUSKLAPPEN]

Function mov_figur(richtung) ;1 = hoch, 2 = runter, 3 = rechts, 4 = links
If (richtung = 1 And tile(get_pos_x(),get_pos_y()-1,1) = 1) Or (richtung = 2 And tile(get_pos_x(),get_pos_y()+1,1) = 1) Or (richtung = 3 And tile(get_pos_x()+1,get_pos_y(),1) = 1) Or (richtung = 4 And tile(get_pos_x()-1,get_pos_y(),1) = 1) Then
For frame = 0 To 3
Cls
draw_map()
draw_header()
If richtung = 1 Then
DrawImage player_up,320,224,frame
card_y = card_y + 0.25
EndIf
If richtung = 2 Then
DrawImage player_down,320,224,frame
card_y = card_y - 0.25
EndIf
If richtung = 3 Then
DrawImage player_right,320,224,frame
card_x = card_x - 0.25
EndIf
If richtung = 4 Then
DrawImage player_left,320,224,frame
card_x = card_x + 0.25
EndIf
Delay warte_zeit
debug_info()
Flip
Next
Else
If schaurichtung = 1 Then DrawImage player_up,320,224,1
If schaurichtung = 2 Then DrawImage player_down,320,224,1
If schaurichtung = 3 Then DrawImage player_right,320,224,1
If schaurichtung = 4 Then DrawImage player_left,320,224,1
EndIf
End Function


Erklärungen:
schaurichtung = richtung, in die die figur schaut
debug_info() = zeigt debug_infos
draw_map() = funktion, die die tiles malt
tiles(x,y,z) = feld, in dem für jedes tile x,y und bestimmte werte (z) gespeichert sind
player_down;player_up;... = animbilder
card_x;card_y = variablen, um die die tiles verschoben gemalt werden sollen;
get_pos_x(),get_pos_y() = liefer die x- oder y-position des spielers zurück

nun zu meinem prob:

der code funktioniert, aber wenn ich die richtungstaste gedrückt halte, dann geht die figur zwar auch noch, aber zuerst einen schritt richtig, dann noch einen und noch einen, den letzten schritt macht sie rückgängig und springt dann 2 schritte, sodass sie richtig aufkommt nach der funktion... aber dadurch entsteht ein komisches wackeln und zittern...

ich hoffe, jemand findet den fehler...
thx!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de
 

sdjh

BeitragDo, Jun 24, 2004 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm ja.

Wenn ich das jetzt richtig durchblicke, dann ist das etwas komisch gemacht.

In der For-Next-Schleife schreibst du folgendes:

Falls richtung=1 ist, dann ZeichneGrafik ...,frame

Da du aber in der Schleife frame von 0-3 durchgehst, zeichnest du die Figur 4x, alle vier Richtungen.

Versuch das mal:
Code: [AUSKLAPPEN]

function mov_player(richtung)
DrawImage player_up,320,224,richtung-1
card_y = card_y + 0.25
end function


das sollte schon funktionieren.

Und merke:
Nutze NIE Cls und Flip in einer solchen Schleife. Nutze Cls ganz am Anfang, befor du irgendetwas zeichnest und Flip ganz am Ende, nachdem du alles gezeichnet hast.

So:
Code: [AUSKLAPPEN]

Setbuffer backbuffer()
While not ende=true
cls     ;Bildschirm löschen

;Grafiken zeichnen...
mov_player(1)

flip    ;Grafiken anzeigen
wend


Und wenn du auch noch ein Tipp am Rande mitnehmen willst: Wenn du TileBlock nutzt (wie mir scheint), brauchst du kein Cls mehr. Damit wird der gesamte Bildschirm übermalt und muss nicht mehr gelöscht werden. Das ist wie bei einer Littfasssäule: Ist ja auch schneller, wenn du einfach ein altes Plakat überklebst und es nicht vorher abreisst ^^

joachim_neu

BeitragDo, Jun 24, 2004 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Falls richtung=1 ist, dann ZeichneGrafik ...,frame


ne, das zeigt ja nur an, in welche richtung sich die figur bewegen soll, also wenn richtung = 1 dann zeichnet er nur die 4 frames von player_up. das mit dem cls und flip ist deswegen, weil diese funktion ja nicht nur ein frame malt, sondern alle 4 und dadurch würde ja sonst der hintergrund nichtmehr gemalt werden usw... deswegen ist da auch noch draw_map() drin...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

Freeman

BeitragDo, Jun 24, 2004 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
was nutzt du für charsets? ich nutze solche :
user posted image

und so mache ich dann die animation für den char :

Code: [AUSKLAPPEN]

Function char_move(zwischenwartezeit)
If oben = 1
stoplaufanim = 1
wartezeit = MilliSecs()
If wartezeit - timer3 >104 Then frame = 0
If wartezeit - timer3 >104+zwischenwartezeit Then frame = 1
If wartezeit - timer3 >104+(zwischenwartezeit*2) Then frame = 2
If wartezeit - timer3 >104+(zwischenwartezeit*3) Then frame = 1
If wartezeit - timer3 >104+(zwischenwartezeit*4) Then timer3 = wartezeit
EndIf


If links = 1
stoplaufanim = 2
wartezeit = MilliSecs()
If wartezeit - timer3 >104 Then frame = 9
If wartezeit - timer3 >104+zwischenwartezeit Then frame = 10
If wartezeit - timer3 >104+(zwischenwartezeit*2) Then frame = 11
If wartezeit - timer3 >104+(zwischenwartezeit*3) Then frame = 10
If wartezeit - timer3 >104+(zwischenwartezeit*4) Then timer3 = wartezeit
EndIf

If rechts = 1
stoplaufanim = 3
wartezeit = MilliSecs()
If wartezeit - timer3 >104 Then frame = 3
If wartezeit - timer3 >104+zwischenwartezeit Then frame = 4
If wartezeit - timer3 >104+(zwischenwartezeit*2) Then frame = 5
If wartezeit - timer3 >104+(zwischenwartezeit*3) Then frame = 4
If wartezeit - timer3 >104+(zwischenwartezeit*4) Then timer3 = wartezeit
EndIf

If unten = 1
stoplaufanim = 4
wartezeit = MilliSecs()
If wartezeit - timer3 >104 Then frame = 6
If wartezeit - timer3 >104+zwischenwartezeit Then frame = 7
If wartezeit - timer3 >104+(zwischenwartezeit*2) Then frame = 8
If wartezeit - timer3 >104+(zwischenwartezeit*3) Then frame = 7
If wartezeit - timer3 >104+(zwischenwartezeit*4) Then timer3 = wartezeit
EndIf
end Function


FrEeMan

Jan_

Ehemaliger Admin

BeitragDo, Jun 24, 2004 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
ey, freeman, du machst dir das aber schwer!
wieviele Zeilen Quellcode hasst du schon?
between angels and insects

joachim_neu

BeitragDo, Jun 24, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
ne, ich benutze welche, wo jede richtung in einer anderen file ist...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group