Probleme mit Kollision und Grafik bei Bomberman-Clone
Übersicht

LandorinBetreff: Probleme mit Kollision und Grafik bei Bomberman-Clone |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich wollte mich mal an einen Bomberman Clone (eher im Stil von "Dynablaster") versuchen. Ja, da gibt's jede Menge von, das ist auch eher als Übung für mich gedacht (aber natürlich auch zum zocken). Ich hänge jetzt aber an dem Punkt fest, wo die Explosion gemalt wird. Der Knackpunkt ist, daß die Explosion durch den 1. zerstörten Stein und darüber hinaus durchgemalt wird, statt nach dem 1. Stein aufzuhören (dahinter explodiert ja nichts mehr). Code: [AUSKLAPPEN] ; explosion wird gemalt
For s = 0 To sprengkraft If (mx+s) < 20 Then DrawImage boom,(mx+s)*28,my*26 If (mx-s) > 0 Then DrawImage boom,(mx-s)*28,my*26 If (my+s) < 20 Then DrawImage boom,mx*28,(my+s)*26 If (my-s) > 0 Then DrawImage boom,mx*28,(my-s)*26 (mx ist X-Koordinate der Bombe und der sich ausbreitenden Explosion, s gibt die Länge der Explosion an, boom stellt ein Bildchen mit Feuer dar) Mir will einfach kein Lösungsweg einfallen, wie ich verhindere, daß nachdem die Explosion auf den 1. Stein trifft und diesen zerbröselt, die Explosion einfach weitergeht. Ich hab's mehrfach versucht mit Sachen wie Variablen setzen, die sich die Position des 1. gefundenen Steins durch die Explosion merken aber das klappt alles irgendwie nicht. :/ Kann mir da jemand Ansätze liefern ("quasi-code")? Von mir aus auch echter Code. ![]() Wie man sieht, sind es auch lauter IF Abfragen, auch da fehlt mir die richtige Idee, wie das eleganter geht. Das Problem ist, wenn ich die "Animation" als Funktion/Unterprogramm erstelle, dann arbeitet der ja das Unterprogramm komplett ab und macht dann erst im Hauptprogramm weiter, was dazu führt, daß das gesamte Game quasi stehen bleibt, während der Zeichnung der Explosion. Ich kann auch den gesamten Quellcode posten, wenn gewünscht. |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
da ein bombermanlevel aus tiles besteht, sagen wir einfach mal 40*30,
erstmal dim level(40,30) in dem dimfeld speicherst du den kompletten level ab (per leveleditor), z.b. so: level(0,0)=bombe level(1,0)=leer level(2,0)=leer level(3,0)=mauer das baust du dann einfach in deine if-abfrage mit ein. pseudocode: wenn blablabla UND level(x,y)=leer dann zeichne explosion bischen kurz, bin aber grad auf dem sprung ![]() grüsse, PSY |
||
Landorin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ein dimfeld habe ich bereits.
Wenn ich deinen Vorschlag richtig verstehe, wird es zu Problemen kommen, wenn z.b. rechts von der Explosion ein Stein kommt, danach ein leeres Feld und wieder ein Stein. Dann müßte doch die Explosion zwischen den beiden Steinen in dem leeren Feld erscheinen, was ja nicht sein soll (Explosion soll ja nicht über den 1. getroffenen Stein hinaus gehen). |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
war nur als denkanstoss gedacht ![]() hier ein bischen präziser: (immer noch ganz grob) FOR x= 1 to 4 (richtung) ...(code)... IF blablabla UND level(x,y)=leer zeichne explosion ELSE beende zeichnen der explosion in diese richtung ENDIF ...(code)... NEXT d.h. alle richtungen durchgehn, sobald mauer kommt, explosion nicht mehr zeichnen, richtung abbrechen und nächste überprüfen probiers mal...wenn ich mehr zeit hab kann ich dir auch mal ein korektes codesegment posten. grüsse, PSY |
||
Landorin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, irgendwie blicke ich da nicht durch. Er zeichnet zwar jetzt nicht mehr die gesamte Explosion, stattdessen ein Feld mehr als gewünscht (beim 1. Stein und die leere Stelle dahinter, dann ist Schluß).
Irgendwie bin ich entmutigt... ich meine, wenn ich nichtmal sowas (vermutlich) simples hinkriege, habe ich mich vielleicht dem falschen Hobby gewidmet...? ![]() ![]() |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
das liegt daran dass die schleife einmal zuviel durchlaufen wird oder er wegen ner falschen IF-abfrage zu spät rausspringt.
ich denk du hast es fast geschafft. wenns nicht klappt poste mal den code l8er, PSY |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Landorin, ich habe mal sowas für ein Othello-Spiel gebraucht (download hier im Codearchiv). hier mal ein kurzer Beispielcode... Dabei sind nur die beiden Koordination (oben im Code) und die eine Explosionsroutine (unten im Code) interessant.Code: [AUSKLAPPEN] Graphics 400,400,16,2
SetBuffer BackBuffer() ;Spielfeld Dim xy%(39,39) ;Koordination X Dim xc%(3) xc(0)=1 xc(1)=0 xc(2)=-1 xc(3)=0 ;Koordination Y Dim yc%(3) yc(0)=0 yc(1)=1 yc(2)=0 yc(3)=-1 ;Rahmen im Spielfeld erzeugen For q=0 To 39 xy(q,0)=1 xy(q,39)=1 xy(39,q)=1 xy(0,q)=1 Next ;Zufallsspielfeld erzeugen For q=1 To 30 xy(Rand(0,39),Rand(0,39))=1 Next While Not KeyHit(1) mx=MouseX()/10 my=MouseY()/10 ;Spielfeld Color 128,128,128 For y=0 To 39 For x=0 To 39 If xy(x,y)=1 Then Rect x*10,y*10,11,11,1 Else Rect x*10,y*10,11,11,0 End If Next Next ;Explosion Color 255,128,0 For richtung=0 To 3 For laenge=0 To 10 If xy(mx+xc(richtung)*laenge,my+yc(richtung)*laenge)=0 Then Rect (mx+xc(richtung)*laenge)*10,(my+yc(richtung)*laenge)*10,11,11,1 Else Exit End If Next Next Flip Cls Wend End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group