explosionsanimation(gelöst)
Übersicht BlitzBasic
 BlitzBasic  Beginners-Corner
 Beginners-Corner| MisterKnisterBetreff: explosionsanimation(gelöst) |  So, Aug 31, 2008 9:06 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 |  So, Aug 31, 2008 10:25 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 |  So, Aug 31, 2008 10:45 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 |  So, Aug 31, 2008 10:49 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 |  So, Aug 31, 2008 10:59 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 |  So, Aug 31, 2008 11:09 Antworten mit Zitat   | 
|---|---|---|
| Kannst auch ein BMP nehmen. Mit Frames. Guck LoadAnimImage   | ||
| MisterKnister |  So, Aug 31, 2008 12:36 Antworten mit Zitat   | |
|---|---|---|
| ich weis was loadanimimage ist aber ich hab es bis jetzt nur benutzt um zum beispiel propelloren rotieren zu lassen. | ||
|   | XeresModerator |  So, Aug 31, 2008 13:14 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 |  So, Aug 31, 2008 19:01 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 |  So, Aug 31, 2008 19:12 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 |  So, Aug 31, 2008 19:30 Antworten mit Zitat   | 
|---|---|---|
| Oder du machst es mit Code: [AUSKLAPPEN] Delay(100) oder so... | ||
|   | The_Nici |  So, Aug 31, 2008 19:31 Antworten mit Zitat   | 
|---|---|---|
| sheldon Delay hält das ganze programm an. | ||
| MisterKnister |  So, Aug 31, 2008 19:40 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 |  So, Aug 31, 2008 19:52 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 |  So, Aug 31, 2008 20:05 Antworten mit Zitat   | |
|---|---|---|
| das mit dem eigenen type hab ich verstanden ich werds mal ausprobieren, aber was meinst du mit steuervariable | ||
|   | XeresModerator |  So, Aug 31, 2008 20:21 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 |  So, Aug 31, 2008 20:29 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 |  So, Aug 31, 2008 22:12 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 |  So, Aug 31, 2008 23:39 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 |  Mo, Sep 01, 2008 13:36 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
 BlitzBasic
 BlitzBasic  Beginners-Corner
 Beginners-Corner
					Powered by phpBB © 2001 - 2006, phpBB Group
				



