Probleme mit Type und Animation
Übersicht

ZiggyBetreff: Probleme mit Type und Animation |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mein Problem:
Ich habe einen Type für Schüsse und eine Animation wenn der Schuss den Bildschirmrand trifft, dann soll die Patrone quasi explodieren. Leider wird (vermutlich durch den Type) immer pro Patrone nur ein Frame der Animation abgespielt. So siehts aus: (nur das wichtigste) Code: [AUSKLAPPEN] For s.shot = Each shot s\px = s\px + wpnspeed DrawImage wpnimg,s\px,s\py If s\px > gfxWidth-50 Then s\dead = 1 For I = 0 To 5 DrawImage expl1,s\px,s\py,I Next EndIf If s\dead Delete s.shot Next Ich vermute stark dass die IF-Schleife für die Animation einfach an der Stelle nicht funktionert, da ich aber die s\px (Position des Schusses) nur in der For...Next-Anweisung verwenden kann kann ich die IF-Schleife nirgendwo anders unterbringen. Die Schussposition brauche ich später wenn ich diese Animation abspielen will wenn z.B. ein Gegner angerannt kommt. Dann ändert sie sich ja. Warscheinlich hab ich nur nen Denkfehler, wäre nett wenn ihr mir da weiterhelfen könntet. Gruß. |
||
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."
"Irren ist menschlich, gut dass ich ein Gott bin... xD" letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If s\px > gfxWidth-50 Then
Du zeichnest alle Frames übereinander und löschst den Type danach -> so sieht man nie eine Animation.
s\dead = 1 For I = 0 To 5 DrawImage expl1,s\px,s\py,I Next EndIf Lösungsmöglichkeit wäre s\dead als Framenummer anzugeben, herunterzuzählen und dann irgendwann zu löschen, oder für den Type eine Extra variable für den Frame zu deklarieren, und dann sowas wie If s\dead=1 and s\frame=5 then Delete s.shot zu benutzen... je nach dem was dir sinnvoller erscheint. |
||
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) |
Ziggy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habs jetzt mal so probiert:
Code: [AUSKLAPPEN] For s.shot = Each shot s\px = s\px + wpnspeed DrawImage wpnimg,s\px,s\py If s\px > gfxWidth-50 Then s\dead = 1 For I = 0 To 5 DrawImage expl1,s\px,s\py,I If s\dead And I=5 Delete s.shot Next EndIf Next Eigentlich sollte es so funktionieren, der Schuss bleibt ja jetzt bis zum Ende der Animation bestehen. Ich habe herausgefunden dass einfach nur die Animation zu schnell abgespielt wird, so dass man nur den ersten Frame sieht. Also brauche ich nur noch einen Timer der die Animation verlangsamt.... ![]() |
||
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."
"Irren ist menschlich, gut dass ich ein Gott bin... xD" letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nochmal ganz eindeutig: Keine For...Next Schleife!
Es wär im Grunde nichts anderes als du vorher gehabt hast. Du musst nach jeder Aktualisierung, d.h. jedesmal wenn du den Frame geändert und das passende Bild angezeigt hast, das Programm weiterlaufen lassen bis flip erreicht wurde - sonst wird das nie was. Kick diese schleife da raus, und mach eine schlaue If...Then Bedingung rein, wann der Frame geändert und wann gelöscht werden soll... |
||
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) |
Ziggy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Nochmal ganz eindeutig: Keine For...Next Schleife! Gut ... leider weiss ich nicht wie ich mit einer IF-Anweisung die Frames immer um einen erhöhen kann.... Was ich bisher hinbekommen hab: Code: [AUSKLAPPEN] For s.shot = Each shot s\px = s\px + wpnspeed DrawImage wpnimg,s\px,s\py If s\px > gfxWidth-50 Then s\px = gfxWidth-50 If frame < 6 Then frame = frame + 1 DrawImage expl1,s\px,s\py,frame s\dead = s\dead + frame EndIf EndIf If s\dead = 6 Delete s.shot Next Damit wird der Frame aber nur um 1 erhöht... Mit fehlt wohl das Verständnis dafür. |
||
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."
"Irren ist menschlich, gut dass ich ein Gott bin... xD" letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sieht doch schon nicht ganz falsch aus. Jetzt brauchst du nur den entsprechenden Field Eintrag für den Type, sonst wäre ja "frame" für alle Types gleich, nicht?
Wenn s\dead = 1 Dann zeichne entsprechendes Bild erhöhe s\frame um eins Wenn s\dead = 1 und s\frame = 5 (z.B) Dann Lösche diesen Eintrag. |
||
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) |
Ziggy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Unglaublich.... es funktioniert wie geschmiert.
Auch wenn ich noch nicht vertstanden habe weshalb es mit "s\frame" funktioniert und mit einer globalen Variable "frame" nicht ![]() Aber da komm ich auch noch hinter. Mein Code nochmal: Code: [AUSKLAPPEN] For s.shot = Each shot s\px = s\px + wpnspeed DrawImage wpnimg,s\px,s\py If s\px > gfxWidth-50 Then s\px = gfxWidth-50 If s\frame < 6 Then s\frame = s\frame + 1 DrawImage expl1,s\px,s\py,s\frame s\dead = s\dead + s\frame EndIf EndIf If s\dead = 6 Delete s.shot Next Hoffentlich alles so wie du es meintest Xeres. Ich danke für die Hilfe. |
||
"Es gibt 10 Arten von Menschen: Diejenigen die Binär verstehen, und jene die es nicht verstehen."
"Irren ist menschlich, gut dass ich ein Gott bin... xD" letzte Informatik-Note : 1 ... 96% richtig, Thema: C++ switch/case |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group