Animation per Tastendruck

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

5th-Element

Betreff: Animation per Tastendruck

BeitragMi, Aug 20, 2008 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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


user posted image
Mit freundlichen Grüßen

5th-Element

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Aug 20, 2008 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Aug 20, 2008 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Crying or Very sad
Mit freundlichen Grüßen

5th-Element

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Aug 20, 2008 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group