animation nur einmal abspielen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

snörkl

Betreff: animation nur einmal abspielen

BeitragSo, März 18, 2007 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich möchte eine art moorhuhnclon (wo hab ich das schonmal gehört^^) proggen und bin jetzt auch soweit, das ich auf ein alien schießen kann und wenn ichs treffe auch ein einschussloch erscheint. Nun möchte ich ja, das blut aus diesem einschussloch rinnt. Da ist mein problem. Denn wenn ich das ganze normal mit animimage mache, rinnt immer wieder neues blut aus der wunde, außerdem läuft die animation für jedes einschussloch (also jeden type) gleich ab. Ich poste mal meinen code, die frameroutine ist mein problem:

Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()


;types

Type schuss
Field x,y
End Type

Global tmrblut=MilliSecs()
Global frame=0
Global alienx=80,alieny=80
;loadimages

alien=LoadImage("alien.png")
MaskImage alien, 255,0,255
MidHandle alien

pointer=LoadImage("pointer.png")
MaskImage pointer, 0,0,0

einschussloch=LoadAnimImage("einschussloch\splatter.png",70,70,0,4)
MaskImage einschussloch,254,254,254

;hauptschleife beginnt
HidePointer()
While Not KeyHit(1)

 mx=MouseX()
 my=MouseY()

;////////////////////////Alien///////////////////////////
DrawImage alien,alienx,alieny

;/////////////////Pointer////////////////
DrawImage pointer,MouseX(),MouseY()




;/////////////////////////frameroutine////////////////////
If frame < 4

 If frame = 0
  If MilliSecs()>tmrblut + 1000
   tmrblut=MilliSecs()
   frame=(frame+1) Mod 4
  EndIf
 EndIf
 
 If frame=>1
  If MilliSecs()>tmrblut + 100
   tmrblut=MilliSecs()
   frame=(frame+1) Mod 4
  EndIf
 EndIf
 
EndIf 

;//////////////////////////Schuss//////////////////////////
If MouseHit(1) And ImagesCollide(alien,alienx,alieny,0,pointer,mx,my,0)
  schuss.schuss=New schuss
  schuss\x = Mx +10
  schuss\y = MY +9
 
EndIf

For schuss=Each schuss
 DrawImage einschussloch,schuss\x,schuss\y,frame
Next

;;;;;;;;;;;;;;;;;;;;;;;
Flip
Cls
Wend
End


Ich hoffe ihr könnt mir helfen,
mfg,
Snörkl

Dottakopf

BeitragSo, März 18, 2007 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm hab etz nur kurz überflogen, aber warum speicherst du die einschusslöcher in einem type und ned die aliens ? Zu deinem Frame problem gibts 2 möglichkeiten:

1. Du stoppst die ani einfach: if frame <4 then frame = frame +1
Sobald frame 4 erreicht, bleibt das letze bild stehen.
2. Oder du löscht bei erreichen des 4ten frames gleich das alien
if frame = 4 then delete info.alien (man kann noch kleine timer einbauen damit es nicht so schnell und ruckartig wird)

aufjeden fall würd ich erstmal die aliens in nem type speichern, weil "alien-moorhuhn" mit einem einzigen hünchen kommt komisch ^^. Also so inetwa:
Code: [AUSKLAPPEN]

field blup
 field blup_x
 field blup_y
 field blup_richtung ; verschiedene richtungen, wo die herkommen
end type


So und wenn du nun mit deinen "pointer" auf das alian ballerst, dan einfach die sterbe ani abspielen und beim letzten frame stoppen, bzw. bei erreichen des letzen frames löschen.


Ich hoffe, dass dir des weiterhilft

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

snörkl

BeitragSo, März 18, 2007 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank, ich hätte die aliens später noch in nen type gepackt, aber ich wollte erstmal mit der schussfunktion spielen^^. Ich probiers jetzt erstmal mit stoppen aus, dann schau ich weiter Smile

mfg,
Snörkl


EDIT: Nun zeigt er mir nur leider an, das image frame out of range wäre ^^. Anscheinend zählt er noch weiter Neutral

Dottakopf

BeitragSo, März 18, 2007 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ne zählen tut der nimma ... vielleicht mal <3

~EDIT~
hab schnell mal n progi geschrieben und des Problemchen gelöst...

Des alien bild (aa) kanst ja schnell durch irgendwass billiges ersetzen (3 32x32 farbige kästechen z.B.) halt als animantionsbild. Cool

Code: [AUSKLAPPEN]

Graphics 800,600,32
SetBuffer BackBuffer()

;globals
Global frame,counter,x,y
Global ani = False

;gfx
Global lol = LoadAnimImage("aa.bmp",32,32,0,3)
Global maus = LoadImage("maus.bmp")


;hauptschleife
Repeat
Cls


alien_tot()   ;die ani function
pointer()     ;die Maus/Fadenkreuz ...

Flip
Until KeyHit(1)


Function pointer()

  x = MouseX()
  y = MouseY()
  DrawImage maus,x,y

End Function

Function alien_tot()
          ;bei treffer ani starten
           If ImagesCollide(maus,x,y,0,lol,200,200,0) And MouseDown(1) Then ani = True

               ;Zähler varriable damit man die einzelbilder überhaupt sehen kann
               If ani = True And frame <2 Then counter = counter +1
                 
                 ;immer wen 10 erreicht nächsten frame zeichnen
                 If counter = 10 Then
                    frame = frame +1
                    counter = 0
                 End If

             ;ja und alles mit frame malen ...
             DrawImage lol,200,200,frame
 
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group