Fehler bei einer Animationsanzeige ;-)...
Übersicht

![]() |
joachim_neuBetreff: Fehler bei einer Animationsanzeige ;-)... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ä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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
was nutzt du für charsets? ich nutze solche :
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ey, freeman, du machst dir das aber schwer!
wieviele Zeilen Quellcode hasst du schon? |
||
between angels and insects |
![]() |
joachim_neu |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group