Probleme mit Kollision und Grafik bei Bomberman-Clone

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Landorin

Betreff: Probleme mit Kollision und Grafik bei Bomberman-Clone

BeitragMi, Sep 07, 2005 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Very Happy

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

BeitragMi, Sep 07, 2005 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

grüsse,
PSY
 

Landorin

BeitragMi, Sep 07, 2005 18:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Sep 07, 2005 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
war nur als denkanstoss gedacht Smile

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

BeitragMi, Sep 07, 2005 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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...? Rolling Eyes Aber vielleicht ist es doch anspruchsvoller, als ich meine... Shocked

PSY

BeitragMi, Sep 07, 2005 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Sep 07, 2005 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group