Animation per Tastendruck
Übersicht

5th-ElementBetreff: Animation per Tastendruck |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Community,
ich arbeite an einer Steuereung so zu sagen das wenn man eine der pfeiltesten drückt die animation erscheint. ich komm aber net weiter wenn ich eine zweite taste hinzufüge. mein problem liegt daran das ich nicht weis wie ich ihm sagen kann das er ab frame 4 anfangen soll wenn er nach links geht. hier mein code und das sprite. Code: [AUSKLAPPEN] Graphics 500, 500, 32, 2 SetBuffer BackBuffer() ClsColor 255, 255, 255 Boy = LoadAnimImage("boy.png", 36, 62, 0, 16) MaskImage Boy, 255, 0, 255 tempo = 200 Repeat Cls FlushKeys() If KeyDown(208) Then PlayerDir = 0 If MilliSecs() > timer + tempo Then If frame < 3 Then frame = frame + 1 zaehler = 0 Else frame = 0 PlayerDir = 0 End If timer = MilliSecs() End If ElseIf KeyDown(203) Then PlayerDir = 4 If MilliSecs() > timer + tempo Then If frame < 7 Then frame = frame + 1 zaehler = 0 Else frame = 0 PlayerDir = 0 End If timer = MilliSecs() End If ;Else ;frame = 0 EndIf DrawImage Boy, 100, 100, frame + PlayerDir Flip Until KeyHit(1) End ![]() |
||
Mit freundlichen Grüßen
5th-Element |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sicherlich nicht die optimalste Möglichkeit, da ich es bisher auch noch nicht gemacht hatte, aber einen Versuch wollte ich denoch starten.
Code: [AUSKLAPPEN] Graphics 500,500,32,2
SetBuffer BackBuffer() ClsColor 255, 255, 255 Local VTimer=CreateTimer(75) Local Boy = LoadAnimImage("e:\boy.png", 36, 62, 0, 16) MaskImage Boy, 255, 0, 255 Const Tempo = 150 Local AnimStart Local AnimSequenz Local AnimStep Local MSSave Local MS Local X Local Y While Not KeyHit(1) MS=MilliSecs() If MS>MSSave Then MSSave=MS+Tempo AnimStep=1 Else AnimStep=0 End If If KeyDown(208) Then Y=Y+1: AnimSequenz=(AnimSequenz+AnimStep) Mod 4: AnimStart=0 If KeyDown(203) Then X=X-1: AnimSequenz=(AnimSequenz+AnimStep) Mod 4: AnimStart=4 If KeyDown(205) Then X=X+1: AnimSequenz=(AnimSequenz+AnimStep) Mod 4: AnimStart=8 If KeyDown(200) Then Y=Y-1: AnimSequenz=(AnimSequenz+AnimStep) Mod 4: AnimStart=12 DrawImage Boy, 100+X, 100+Y, AnimStart+AnimSequenz WaitTimer(VTimer) Flip 0 Cls Wend End Probleme gibt es noch wenn man schräg geht. Dann addieren sich die Animationssequenzen und der Typ läft dann doppelt so schnell, oder sichtbar unbeweglich, da immer zwei Bilder gleich sind. Das ganze kann man aber noch mit Flags lösen (ähnlich wie jetzt mit AnimStep auch). Also so, dass nur die Animationsseuqnz addiert wird, wenn ein Flag gesetzt ist. Dieser wird von vorher gedrückten Tasten bestimmt... Sorry auch, dass ich deine Codestruktur umgekrempelt habe. Ist halt so eine Angewohnheit von mir. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
5th-Element |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Stiiiiiiier
Auf des wäre ich gar net gekommen...es ist jetzt der mittlerweile 6 anlauf bb zu lernen aber ich bekomms trotzdem net alleine hin. ich glaub ich bin dafür net geschaffen ![]() |
||
Mit freundlichen Grüßen
5th-Element |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Programmieren erlernt man nicht 'mal eben so', sondern vielmehr durch einen langjährigen Prozess. Auch wenn man alle Befehle auswendig lernen würde, könnte man noch nicht gut programmieren. Also nicht den Mut verlieren, sondern weiter machen wenn es einem Spaß macht. Mir zumindest macht es viel Spaß. Sogar immer mehr, je mehr ich zustande bekomme.
Meine Lösung ist im übrigen sicherlich nicht perfekt. Da solltest du nochmal drüber schauen, ob dir noch was auffält, wie man eventuell noch was einfacher hinbekommt etc... Da mich das selbst interessiert, habe ich in den letzten Minuten noch weiter gearbeitet, und es ist folgendes raus gekommen: Code: [AUSKLAPPEN] Graphics 500,500,32,2
SetBuffer BackBuffer() ClsColor 255, 255, 255 Local VTimer=CreateTimer(75) Local Boy = LoadAnimImage("e:\boy.png", 36, 62, 0, 16) MaskImage Boy, 255, 0, 255 Const AnimTempo=150 Local AnimOffset Local AnimSequenz Local AnimMachen Local AnimStep Local MSWait Local MS Local X Local Y While Not KeyHit(1) MS=MilliSecs() If MS>MSWait Then MSWait=MS+AnimTempo AnimMachen=1 Else AnimMachen=0 End If AnimStep=0 If KeyDown(208) Then Y=Y+1: AnimStep=1: AnimOffset=0 If KeyDown(203) Then X=X-1: AnimStep=1: AnimOffset=4 If KeyDown(205) Then X=X+1: AnimStep=1: AnimOffset=8 If KeyDown(200) Then Y=Y-1: AnimStep=1: AnimOffset=12 If AnimStep=1 Then AnimSequenz=(AnimSequenz+AnimMachen) Mod 4 Else If (AnimSequenz Mod 2)<>0 Then AnimSequenz=(AnimSequenz+AnimMachen) Mod 4 End If DrawImage Boy, 100+X, 100+Y, AnimOffset+AnimSequenz WaitTimer(VTimer) Flip 0 Cls Wend End - Die Animation ist jetzt immer gleich schnell, egal wie viele Tasten man auf einmal drückt. - Die Animation läuft bis zum nächsten geraden Frame aus, auch dann, wenn man keine Taste mehr drückt, damit der Typ beim stehen nicht die Füsse in der Luft behält. Wichtig ist nur, dass du nicht einfach Copy&Paste machst, sondern versuchst den Code zu verstehen, wenn du diesen auch einsetzen willst. Ansonsten wirst du noch mehr Frust schieben, wenn mal an anderer Stelle was nicht klappt und eventuell dieser Code geändert/erweitert werden müsste. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group