meine Animationen bleiben hängen!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

rambo256

Betreff: meine Animationen bleiben hängen!

BeitragDo, März 04, 2004 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ALso ich habe folgendes Problem:
Mal läuft alles perfekt,d.h. meine Animationen bleiben nicht hängen.
Doch plötzlich bleiben sie ohne Grund einfach hängen.Ich habe aber keinen blassen Schimmer warum.
Bitte helft mir,es kann nur am Code liegen und nicht an den Bildern!!!
Code: [AUSKLAPPEN]
;Variabeln

Global r = 1  ; Richtung (1 = rechts, -1 = links)
Global g = 0  ; Gangart (stehen = 0;laufen = 1;rennen = 2)
Global player_x = 200
Global player_y = 500
Global frame = 0
Global frame2 = 6
Global frame3 = 4
Global frame4 = 5
Global frame5 = 3
Global frame6 = 6
Global frame7 = 0
Global frame8 = 8
Global frame9 = 0
Global frame10 =9
Global speed = 2
Global frame_timer = 10
Global frame_timer_schlag = 6
Global rechts = 32
Global links = 30
Global angriff = 34
Global shift = 42
Global speedp = 78
Global speedm = 74
Global attack = 0   
Global w=0
frametimer = CreateTimer(60);
oldtime = MilliSecs()






;Grafiken laden

Graphics(800,600,32,0)
SetBuffer BackBuffer()
Davis_img_r = LoadImage("grafiken\davis_0_r.bmp")      ; Davis_img_r laden
MaskImage Davis_img_r, 0,0,0
Davis_img_l = LoadImage("grafiken\davis_0_l.bmp")      ; Davis_img_l laden
MaskImage Davis_img_l, 0,0,0
Davis_img1_r = LoadImage("grafiken\davis_1_r.bmp")      ; Davis_img_r laden
MaskImage Davis_img1_r, 0,0,0
Davis_img1_l = LoadImage("grafiken\davis_1_l.bmp")      ; Davis_img_l laden
MaskImage Davis_img1_l, 0,0,0
Davis_img2_r = LoadImage("grafiken\davis_2_r.bmp")      ; Davis_img_r laden
MaskImage Davis_img2_r, 0,0,0
Davis_img2_l = LoadImage("grafiken\davis_2_l.bmp")      ; Davis_img_l laden
MaskImage Davis_img2_l, 0,0,0
Wald_Baume = LoadImage("grafiken\forest.bmp")
Wiese1 = LoadImage("grafiken\land1.bmp")
Wiese2 = LoadImage("grafiken\land2.bmp")
Wiese3 = LoadImage("grafiken\land3.bmp")
Wiese4 = LoadImage("grafiken\land4.bmp")


; Sounds laden

Davis_pfuh = LoadSound("sounds\059.wav")
Davis_Ja = LoadSound("sounds\095.wav")
Trippel1 = LoadSound("sounds\003.wav")
Trippel2 = LoadSound("sounds\004.wav")


;Beginn der Hauptschleife

Repeat
Cls
WaitTimer(frametimer)
Color 255,0,0
Text 5,50,"g:"+g
Text 5,58,"frame_timer: "+frame_timer
Text 5,63,"angriff: "+KeyDown(angriff)
Text 5,68,"attack: "+attack

;Tastenabfragen

For o = 0 To 4
DrawImage Wiese1,o*175,526
DrawImage Wald_Baume,o*253,365
Next
If KeyDown(rechts) And KeyDown(links)=0 Then
   r=1
   g=1
   l=1
   speed = 2
   If g = 1 And attack = 0 Then player_x = player_x+speed
EndIf

If KeyDown(links) And KeyDown(rechts)=0 Then
   r=-1
   g=1
   l=1
   speed = 2
   If g = 1 And attack = 0 Then player_x = player_x-speed

EndIf

If  KeyDown(rechts)=0 And KeyDown(links)=0 Then
   r=r
   g=0
   speed = 2
EndIf

If KeyDown(angriff) And KeyDown(shift)=0 Then
   attack = 1
EndIf

If KeyDown(angriff) And KeyDown(shift) Then
   attack = 2
EndIf

If  KeyDown(shift)=1 And r=1 Then
   r=r
   g=2
   speed = 3
   player_x = player_x+speed
EndIf

If  KeyDown(shift)=1 And r=-1 Then
   r=r
   g=2
   speed = 3
   player_x = player_x-speed
EndIf

If KeyDown(rechts) And KeyDown(links) Then l=0


; animation im zustand = stehend

; rechts

If  r = 1 And g = 0 And KeyDown(angriff) = 0 And KeyDown(shift) = 0 And attack=0 Then 
   If i = frame_timer And frame = 0 Then                      
      frame = frame+1
      i = 0
   EndIf
   If i = frame_timer And frame = 1 Then
      frame= frame+1
      i = 0
   EndIf
   If i = frame_timer And frame = 2 Then
      frame = frame+1
      i = 0
   EndIf
   If i = frame_timer And frame = 3 Then
      frame = 0
      i = 0
   EndIf
i = i+1
DrawImageRect Davis_img_r,player_x,player_y,frame*80,0*80,80,80
EndIf


; links

If  r = -1 And g = 0 And KeyDown(angriff) = 0 And KeyDown(shift) = 0 And attack=0 Then 
   If i = frame_timer And frame2 = 6 Then                      
      frame2 = frame2+1
      i = 0
   EndIf
   If i = frame_timer And frame2 = 7 Then
      frame2 = frame2+1
      i = 0
   EndIf
   If i = frame_timer And frame2 = 8 Then
      frame2 = frame2+1
      i = 0
   EndIf
   If i = frame_timer And frame2 = 9 Then
      frame2 = 6
      i = 0
   EndIf
i = i+1
DrawImageRect Davis_img_l,player_x,player_y,frame2*80,0*80,80,80
EndIf


; Animation im Zustand = gehen/laufen

;rechts

If  r = 1 And g=1 And KeyDown(angriff)=0 And KeyDown(shift)=0 And attack=0 And l=1Then 
   If i = frame_timer And frame3 = 4 And w=0 Then                      
      frame3 = frame3+1
      i = 0
      w=0
   EndIf
   If i = frame_timer And frame3 = 5 And w=0Then
      frame3= frame3+1
      i = 0
      w=0
   EndIf
   If i = frame_timer And frame3 = 6 And w=0Then
      frame3 = frame3+1
      i = 0
      w=0
   EndIf
   If i = frame_timer And frame3 = 7 And w=0Then
      frame3 = 5
      w = 1
      i = 0
   EndIf
   If i = frame_timer And frame3 = 5 And w =1 Then
      frame3= frame3-1
      i = 0
      w=1
   EndIf
   If i = frame_timer And frame3 = 4 And w=1Then
      frame3= frame3+1
      i = 0
      w=0
   EndIf
i = i+1
DrawImageRect Davis_img_r,player_x,player_y,frame3*80,0*80,80,80
EndIf


;links

If  r=-1 And g=1 And KeyDown(angriff)=0 And KeyDown(shift)=0 And attack=0 And l=1 Then 
   If i = frame_timer And frame4 = 5 And w=0 Then                      
      frame4 = frame4-1
      i = 0
   EndIf
   If i = frame_timer And frame4 = 4 And w=0 Then
      frame4= frame4-1
      i = 0
   EndIf
   If i = frame_timer And frame4 = 3 And w=0 Then
      frame4 = frame4-1
      i = 0
   EndIf
   If i = frame_timer And frame4 = 2 And w=0 Then
      frame4 = 4
      i = 0
      w=1
   EndIf
      If i = frame_timer And frame4 = 4 And w = 1 Then
      frame4= frame4+1
      i = 0
      w=1
   EndIf
   If i = frame_timer And frame4 = 5 And w=1Then
      frame4= frame4-1
      i = 0
      w=0
   EndIf
i = i+1
DrawImageRect Davis_img_l,player_x,player_y,frame4*80,0*80,80,80
EndIf



; Animation im Zustand: rennen

;rechts

If  r = 1  And  KeyDown(shift) = 1 And attack=0 Then 
   If i = frame_timer And frame7 = 1 And w=0 Then                      
      frame7= frame7-1
      i = 0
      w=0
   EndIf
   If i = frame_timer And frame7= 0 And w=0Then
      frame7= frame7+1
      i = 0
      w=1
   EndIf
   If i = frame_timer And frame7 = 1 And w=1Then
      frame7 = frame7+1
      i = 0
      w=0
   EndIf
   If i = frame_timer And frame7 = 2 And w=0Then
      frame7 = frame7-1
      w = 0
      i = 0
   EndIf
i = i+1
DrawImageRect Davis_img_r,player_x,player_y,frame7*80,2*80,80,80
EndIf


;links

If  r = -1 And KeyDown(shift) = 1 And attack=0 Then 
   If i = frame_timer And frame8 = 8 And w=0 Then                      
      frame8= frame8+1
      i = 0
      w=0
   EndIf
   If i = frame_timer And frame8= 9 And w=0Then
      frame8= frame8-1
      i = 0
      w=1
   EndIf
   If i = frame_timer And frame8 = 8 And w=1Then
      frame8 = frame8-1
      i = 0
      w=0
   EndIf
   If i = frame_timer And frame8 = 7 And w=0Then
      frame8 = 8
      w = 0
      i = 0
   EndIf
i = i+1
DrawImageRect Davis_img_l,player_x,player_y,frame8*80,2*80,80,80
EndIf


; 1.Schlaganimation


;rechts
If  r = 1 And attack=1 And KeyDown(shift)=0 Then 
   If i = frame_timer_schlag And frame5 = 3 Then                      
      frame5 = frame5+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame5 = 4 Then
      frame5= frame5+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame5 = 5 Then
      frame5 = frame5+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame5 = 6 Then
      frame5 = frame5+1
      w = 0
      i = 0
   EndIf
   If i = frame_timer_schlag And frame5 = 7 Then
      frame5= 0
      i = 0
   EndIf
      If i = frame_timer_schlag And frame5 = 0 Then
      frame5 = frame5+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame5 = 1 Then
      frame5 = frame5+1
      w = 0
      i = 0
   EndIf
   If i = frame_timer_schlag And frame5 = 2 Then
      frame5= 3
      i = 3
      attack = 0
   EndIf
i = i+1
DrawImageRect Davis_img_r,player_x,player_y,frame5*80,1*80,80,80
EndIf


;links
If  r = -1 And attack = 1 And KeyDown(shift) = 0 Then 
   If i = frame_timer_schlag And frame6 = 6 Then                      
      frame6 = frame6-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame6 = 5 Then
      frame6= frame6-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame6 = 4 Then
      frame6 = frame6-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame6 = 3 Then
      frame6 = frame6-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame6 = 2 Then
      frame6= 9
      i = 0
   EndIf
      If i = frame_timer_schlag And frame6 = 9 Then
      frame6 = frame6-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame6 = 8 Then
      frame6 = frame6-1
      w = 0
      i = 0
   EndIf
   If i = frame_timer_schlag And frame6 = 7 Then
      frame6= 6
      i = 3
      attack = 0
   EndIf
i = i+1
DrawImageRect Davis_img_l,player_x,player_y,frame6*80,1*80,80,80
EndIf


; 2.Schlaganimation : im rennen


; rechts

If r=1 And attack = 2 Then
   If i = frame_timer_schlag And frame9 = 0 Then                      
      frame9 = frame9+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame9 = 1 Then                      
      frame9 = frame9+1
      i = 0
      PlaySound Davis_pfuh
      PlaySound Davis_ja
   EndIf
   If i = frame_timer_schlag And frame9 = 2 Then                      
      frame9 = frame9+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame9 = 3 Then                      
      frame9 = frame9+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame9 = 4 Then                      
      frame9 = frame9+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame9 = 5 Then                      
      frame9 = frame9+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame9 = 6 Then                      
      frame9 = frame9+1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame9 = 7 Then                      
      frame9 = 0
      i = 0
      attack=0
   EndIf
i = i+1
DrawImageRect Davis_img2_r,player_x,player_y,frame9*80,3*80,80,80
EndIf


;links

If r=-1 And attack = 2 Then
   If i = frame_timer_schlag And frame10 = 9 Then                      
      frame10 = frame10-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame10 = 8 Then                      
      frame10 = frame10-1
      i = 0
      PlaySound Davis_pfuh
      PlaySound Davis_ja
   EndIf
   If i = frame_timer_schlag And frame10 = 7 Then                      
      frame10 = frame10-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame10 = 6 Then                      
      frame10 = frame10-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame10 = 5 Then                      
      frame10 = frame10-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame10 = 4 Then                      
      frame10 = frame10-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame10 = 3 Then                      
      frame10 = frame10-1
      i = 0
   EndIf
   If i = frame_timer_schlag And frame10 = 2 Then                      
      frame10 = 9
      i = 0
      attack=0
   EndIf
i = i+1
DrawImageRect Davis_img2_l,player_x,player_y,frame10*80,3*80,80,80
EndIf

Flip
Until KeyHit(1)

rambo256

BeitragDo, März 04, 2004 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Um euch zu helfen,Der bleibt dann immer beim ersten frame von der ani hängen,aber auch nur manchmal.Ich weiß echt nicht warum!!

Michi1988

BeitragSo, März 07, 2004 1:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehrlich.
Ich hatte kein Boclk mir den ganzen scheiß durchzulesen.
so unübersichtlich würde ich auch nichts wieder finden.
So komme ich zu meiner Frage.

SOLL DA NUR EINE ANIMATION ABLAUFEN?

Der Progger
 

Ava

Gast

BeitragSo, März 07, 2004 1:51
Antworten mit Zitat
Ich würd ja gern versuchen, Dir irgendwie zu helfen... aber... der Michi hat wirklich recht, das ist echt übel... Confused
Versuch mal den Code von der Länge her auf ein Zehntel maximal zu verkürzen, dass sollte eigentlich für eine simple Animation mehr als ausreichend sein.

Julz

BeitragSo, März 07, 2004 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Außerdem wäre es nett wenn du mal die grafiken uploaden würdest dann könnten wir den code auch testen

Vertex

BeitragSo, März 07, 2004 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
solch ein code sollte doch eigentlich nur bei db zu finden sein oO

Nemen wir mal an, Du hast eine Bild mit einer Animation das in etwa
so aufgebaut ist:
Zitat:
################

Also eine Route repräsentiert ein Bild bzw. ein Frame dieser Animation.
Es existieren hier 16 Frames die sagen wir mal immer 20 * 30 Pixel groß sind.
Dann lädst Du sie ersteinmal so:
Code: [AUSKLAPPEN]
Animation = LoadAnimImage("Animation.png", 20, 30, 0, 16)

Jetzt geht die Attacke von Frame 0 bis Frame 7 und das Laufen von
Frame 8 bis Frame 15.
Also schreibst Du Dir hierfür Konstanten:
Code: [AUSKLAPPEN]
Const AttackStart = 0 : Const AttackEnd = 7
Const RunStart = 8 : Const RunEnd = 15


Hier jetzt die Hauptschleife in der Du die Animation anzeigst.
Code: [AUSKLAPPEN]
FrameStart = RunStart : FrameEnd = RunEnd
While Not KeyDown(1)
   Cls
   If KeyHit(203) Then FrameStart = AttackStart : FrameEnd = AttackEnd
   If KeyHit(205) Then FrameStart = RunStart : FrameEnd = RunEnd
   
   Frame = Frame+1
   ; prüfen, ob Framecounter nicht das Ende der Animationssequenz überschreitet
   If Frame>FrameEnd Then Frame = FrameStart

   DrawImage Animation, 0, 0, Frame
   Flip
Wend


Wenn Du die linke Pfeiltaste drückst, dann wird immer die Attack-Animation
abgespielt, wenn Du die Rechte drückst dann die Laufanimation.
mfg olli
vertex.dreamfall.at | GitHub

rambo256

BeitragSo, März 07, 2004 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
danke,aber ich hab das proggi mal meinem freund gegeben und der hat komischerweise überhaupt keine Fehler.Er hat auch das gleiche BB,aber bei mi läuft es trrotzdem nicht ganz ordentlich.
@ Vertex,thx,aber ich weiß schon wie man so etwas macht Wink
Also ich werde den Code mal dann nochmal ganz von neu schreiben müssen,wennes geklappt hat,dann poste ich mal das ergebnis....
@ all,danke für eure Mühe

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group