explosionsanimation(gelöst)
Übersicht

MisterKnisterBetreff: explosionsanimation(gelöst) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi,
also ich mache gerade eins spiel aber ich weis nicht, wie ich es machen soll, dass eine explosion als animation abgebildet wird, also wie als ein film, das problem ist, dass immer nur ein bild dargestellt wird. hier der code Code: [AUSKLAPPEN] Type shot Field shot_x Field shot_y Field shot_w Field image Field reichweite End Type If karte = 1 Then Restore gegner1 If karte = 2 Then Restore gegner2 If karte = 3 Then Restore gegner3 If karte = 4 Then Restore gegner4 If karte = 5 Then Restore gegner5 Read anzahl For i = 1 To anzahl g.stehendgegner = New stehendgegner Read x, y g\x = x * 32 g\Y = y * 32 g\lebenspunkte = 30 Next Function bodentreffen() For g.stehendgegner = Each stehendgegner For seins.schusseins = Each schusseins If ImagesCollide(seins\image, seins\xschuss, seins\yschuss, frmRakete, turm, g\x, g\y, 0) Then DrawImage raketeexplo, seins\xschuss - 16, seins\yschuss - 20, 1 g\lebenspunkte = g\lebenspunkte - 10 Delete seins.schusseins EndIf Next Next Function bodenloeschen() For g.stehendgegner = Each stehendgegner If g\lebenspunkte <=0 Then Delete g.stehendgegner DrawImage raketeexplo, seins\xschuss - 16, seins\yschuss - 20, frmExplo Next End Function hoffentlich versteht ihr was ich meine. danke schonmal im voraus |
||
- Zuletzt bearbeitet von MisterKnister am Mo, Sep 01, 2008 16:28, insgesamt einmal bearbeitet
![]() |
sheldon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da musst du glaube ich mit Frames arbeiten, also ich würde oben zuerst mal deine Schussvariable(n) definieren. Z.B.:
Code: [AUSKLAPPEN] Dim MeinSchuss.shot
Dim SeinSchuss.shot Dann musst du dein Raketenexplosionsbild laden, also z.B.: Code: [AUSKLAPPEN] raketeexplo = LoadImage("explosion.gif"), Anzahl Frames
(Glaube ich ^^) Danach eine For-Schleife machen: Code: [AUSKLAPPEN] For schleife = 0 to Anzahl Frames
DrawImage raketeexplo, x, y next Problem gelöst? ![]() (bin selber Anfänger ^^) |
||
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
stimmt ein gif bild ist gut aber ich hab die demo kann die sowas laden? wenn ja, wie mache ich ein gif bild? | ||
![]() |
sheldon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube die Demo kann ausschließlich *.bmp-Bilder laden.
Aber du kannst dir verschiedene Programme zum erstellen einer animierten *.gif-Datei holen. Ich benutze z.B. den Ulead Gif Animator. |
||
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hab es gerade ausprobiert aber gif bilder kann die demo nicht, das problem ist mir ja, dass immer nur ein frame abgebildet ist | ||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst auch ein BMP nehmen. Mit Frames.
Guck LoadAnimImage ![]() |
||
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich weis was loadanimimage ist aber ich hab es bis jetzt nur benutzt um zum beispiel propelloren rotieren zu lassen. | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Dein Type braucht ein Field für den Frame:
Code: [AUSKLAPPEN] Type Tshot Field x Field y Field w Field frame Field reichweite End Type 2. Du hast die Frames endweder in einzelnen Bildern, oder hintereinander in einem Bild 2.a - Mehrere Bilder: Code: [AUSKLAPPEN] Dim Explo_img(9)
For i = 0 To 9 Explo_img(i)=LoadImage("explosion"+i+".bmp") Next ;[...] For s.Tshot = Each Tshot ;[...] DrawImage Explo_img(s\frame), s\x, s\y Next 2.b - Alles in einem Bild Code: [AUSKLAPPEN] Global Explo_img = LoadAnimImage("explosion.bmp",32,32,0,10) ;Nicht vergessen an dein Bild anzupassen...
;[...] For s.Tshot = Each Tshot ;[...] DrawImage Explo_img, s\x, s\y, s\frame Next 3. Für Animationen kann man in BB keine Gif-Dateien verwenden. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja laodanimimage hab ich verstanden, das problem ist nur dass immer nur ein frame abgebildet wird, also nicht wie ein film sondern eben nur ein bild | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann brauchst du einen funktionierenden Timer der alle paar hundert Millisekunden einen Frame weiter schaltet, siehe Millisecs![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
sheldon |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oder du machst es mit
Code: [AUSKLAPPEN] Delay(100)
oder so... |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
sheldon Delay hält das ganze programm an. | ||
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
natürlich benutze ich das mit timern mein problem ist, dass wenn ich es mit einem timer mache dann wird das bild abgebildet, wo der timer gerade ist.
mal ein beispiel: ich setze einen timer, der alle 100 millisekunden die variable frm um 1 vergrößert bis sie größer als 10 ist dann kontrolliere ich meinen gegner und merke: ups seine lebenspunkte sind <= 0 dann entscheide ich mich eine explosion zu malen und zwar an die position des gegners und der variable frm als framenun ist aber das problem, dass ich das bild nur zu dem frame male, den der timer gerade angibt jetzt möchte ich aber dass er einen kleinen "film" abspielt, das war meine frage |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest eine Steuervariable im Type verwenden, die umgeschaltet wird, oder die Explosion in einen eigenen Type verwalten. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das mit dem eigenen type hab ich verstanden ich werds mal ausprobieren, aber was meinst du mit steuervariable | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn Status = 1
Schuss Bewegen zeichen usw, bei Lebenspunkte <= 0 Status auf 2. Wenn Status = 2 Explosion Zeichnen bis Timer/Frame ausläuft, Status auf 0 Wenn Status = 0 Eintrag löschen So in der Art. Ein eigener Type macht sich meiner Meinung nach besser. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja funzt danke xeres
nein funzt doch nich, es gibt einfach keine animation: Code: [AUSKLAPPEN] Function bodenloeschen() For g.stehendgegner = Each stehendgegner If g\lebenspunkte <=0 Then If noetig = True e.explo = New explo e\image = raketeexplo e\frm = frame EndIf For e.explo = Each explo DrawImage e\image, g\x, g\y, e\frm e\frm = e\frm + 1 If e\frm > (9) Then Delete e.explo Next Delete g.stehendgegner EndIf Next End Function aber hierbei schon: Code: [AUSKLAPPEN] Graphics 640, 480, 16, 2 SetBuffer BackBuffer() Global rakete = LoadAnimImage("rakete.bmp", 33, 12, 0, 5) Global raketeexplo = LoadAnimImage("raketeexplo.bmp", 64,64, 0, 10) Global speed = LoadImage("speed.bmp") Global haus1 = LoadImage("HausSp1.bmp") Global hausmitte1 = LoadImage("Hausmitte.bmp") Global feind = LoadImage("feind.bmp") fontvariable = LoadFont("Arial") SetFont fontvariable Type explo Field image Field x Field y Field frm End Type Repeat Cls If KeyHit(57) Then e.explo = New explo e\image = raketeexplo e\x = 100 e\y = 100 e\frm = 0 EndIf For e.explo = Each explo DrawImage e\image, e\x, e\y, e\frm e\frm = e\frm + 1 If e\frm >9 Then Delete e.explo Next Flip Until KeyHit(1) weis jemand warum? |
||
Speed><Coder |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi erstmal!!
Ich hatte gestern das gleiche problem mit animierte Bilder, is aber ganz leicht. So wie ich dein Problem versteh, willst du, dass wenn dein Soldat (oder ihrgenteiner) "stirbt" (Lebenspunkte <=0), dass dann an der Stelle des getöten Soldaten eine animierte Explosien kommt, richtig? Wenn ja, versuchs mal damit: (Musst halt an deinen Code anpassen) Den Soldaten kann man mit Pfeiltasten Steuern und nachdem hp <= 0 Kommt die Explosion Code: [AUSKLAPPEN] Soldat = loadimage("soldat.bmp") explo = loadAnimImage("explo.bmp",50,50,0,5) x = 50 y = 50 Repeat cls drawimage Soldat, x,y If KeyDown(200) Then y = y - 1 If KeyDown(208) Then y = y + 1 If KeyDown(205) Then x = x + 1 If KeyDown(203) Then x = x - 1 If x < -10 Then x = 780 If x > 800 Then x = 5 If y < 0 Then y = 595 If y > 600 Then y = 5 if hp <= 0 then Exit flip Forever if hp <= 0 then while not keyhit(1) If MilliSecs() > ufotmr + 50 Then ufotmr = MilliSecs() frmufo = (frmufo + 1) Mod 5 EndIf DrawImage explo,x,y,frmufo Wend EndIf Müsste eigentlich so gehn, wenn nicht, weiß ich auch nicht weiter^^ |
||
World of Warcraft Süchtlinge:
1.Süchtling:"Ey leutz ich heut was von n 'Reallife' gehört." 2.Süchtling:"Was is das??? 3.Süchtling:"LINK????" |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
@MisterKnister:
Du musst natürlich alle relevanten Daten übertragen, es bringt nichts die Position aus einem Type zu nehmen und die Frames aus einem anderen. Außerdem brauchst du mindestens eine Variable um die Zeit für den Timer zu speichern, ansonsten blitzen deine Explosionen wegen "e\frm = e\frm + 1" nur kurz auf. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
MisterKnister |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke xeres ich hab es jetzt so gemacht
Code: [AUSKLAPPEN] ;bilder laden repeat bodenpruefen explomalen until keyhit(1) Function bodenloeschen() For g.stehendgegner = Each stehendgegner If g\lebenspunkte <= 0 Then e.explo = New explo e\image = raketeexplo e\x = g\x e\y = g\y e\frm = 0 Delete g.stehendgegner EndIf Next End Function Function explomalen() For e.explo = Each explo DrawImage e\image, e\x, e\y, e\frm e\frm = e\frm + 1 If e\frm >9 Then Delete e.explo Next End Function und jetzt kalappt es ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group