Type Delete probleme

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Raiden93

Betreff: Type Delete probleme

BeitragMi, Jun 08, 2011 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey leute ich habe ein Spiel Programmiert wo man 3 Kugeln nebeneinander haben muss damit sie Bloppen und mann dann Punkte kriegt.Doch ich weis leider nicht wie ich es anstellen sollte das die 3 Types von den Kugeln auch gelöscht werden. Klar mit dem Befehl Delete aber wie stelle ich das an das ich genau nur die 3 Kugeln Lösche die nebeneinander sind? ich benutze ein Tilemap map(5,8).

Xeres

Moderator

BeitragMi, Jun 08, 2011 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht also nicht um Delete oder Types, sondern um einen Algorithmus, der erkennt, ob die Kugeln gelöscht werden sollen.
Ich würde die Nachbarn jedes Feldes Vergleichen und markieren, dann die markierten löschen.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Raiden93

BeitragMi, Jun 08, 2011 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
okay werde ich nacher mal ausprobieren danke dir

Raiden93

BeitragDo, Jun 09, 2011 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es eigentlich fast schon geschaft nur jetzt habe ich das Problem das wenn die Mittlere Kugel als erstes auf den Boden angekommen ist, die Kugeln Links und Rechts sofort in der Luft verschwinden. Ich möchte es aber gerne so haben das wenn wirklich alle 3 Kugeln zum stehen gekommen sind die 3 Kugeln gelöscht werden.

Code: [AUSKLAPPEN]

Function Kugeln_Delete ();Fast fertig
   For Kugel.KugelTyp = Each KugelTyp
      If map(Kugel\X+1,Kugel\Y) = 1
         If map(Kugel\X-1,Kugel\Y) = 1
            If map(Kugel\X,Kugel\Y) = 1
               If Kugel\AnimY = Kugel\Y*32
                  map(Kugel\X,Kugel\Y) = 0
                  map(Kugel\X+1,Kugel\Y) = 0
                  map(Kugel\X-1,Kugel\Y) = 0
               End If
            End If
         End If
      End If
      
      If map(Kugel\X,Kugel\Y) = 0
         Delete Kugel
      End If
   Next
End Function

das wurgel

BeitragDo, Jun 09, 2011 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht hilft es dir, das Array map von nem Int-Array zu nem Kugel-Array zu machen, sodass du
Code: [AUSKLAPPEN]
Kugel\AnimY = Kugel\Y*32

bei allen drei Kugeln abfragen könntest.

Also so:
Code: [AUSKLAPPEN]
Dim map.Kugel(5,8)
1 ist ungefähr 3

Raiden93

BeitragFr, Jun 10, 2011 6:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem liegt ja nur daran das wenn die main(Mittlere Kugel) Kugel denn letzten tile Boden berührt sich und die nebenstehenden kugeln löscht aber ich hätte es gerne das die Kugeln 1.2 Sekunden später erst Ploppen.

Midimaster

BeitragFr, Jun 10, 2011 7:18
Antworten mit Zitat
Benutzer-Profile anzeigen
aber das ist doch nun nicht mehr schwer:

dort, wo der code steht, der die kugeln löscht, löscht du sie nun nicht mehr, sondern merkst dir, welche kugel es sind, setzt einen "Timer", der x Sekunden später abläuft. Dann fügst Du einen code ein, der auf deinen ablaufenden Timer wartet und dort kommen die Codezeilen rein, die bisher die Kugeln gelöscht haben

symb. Beispielcode
BlitzBasic: [AUSKLAPPEN]
Function Kugeln_Delete ();Fast fertig
For Kugel.KugelTyp = Each KugelTyp
If ...
....
map(Kugel\X,Kugel\Y) = 0
map(Kugel\X+1,Kugel\Y) = 0
map(Kugel\X-1,Kugel\Y) = 0
LoeschTimer=MilliSecs()+1200
....
End If
If LoeschTimer>0 And LoeschTimer<MilliSecs()
If map(Kugel\X,Kugel\Y) = 0
Delete Kugel
LoeschTimer=0
End If
EndIf
Next
End Function
  • Zuletzt bearbeitet von Midimaster am Sa, Jun 11, 2011 7:08, insgesamt einmal bearbeitet

Raiden93

BeitragFr, Jun 10, 2011 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm scheint ja schon fast zu Funktionieren, doch irgendwie löscht sich nur die Kugel in der Mitte :/.

Ich habe schon versucht selbst ein bisschen rum zu schnibbeln aber kein Erfolg :/

Update Code:
Code: [AUSKLAPPEN]

Function Kugeln_Delete ();Fast fertig
   For Kugel.KugelTyp = Each KugelTyp
      If Kugel\AnimY = Kugel\Y*32
         If map(Kugel\X+1,Kugel\Y) = 1
            If map(Kugel\X-1,Kugel\Y) = 1
               If map(Kugel\X,Kugel\Y) = 1
                  map(Kugel\X,Kugel\Y) = 0
                  map(Kugel\X+1,Kugel\Y) = 0
                  map(Kugel\X-1,Kugel\Y) = 0
                  BloopTimer = MilliSecs () +1500
                End If
            End If
         End If
      End If
      
      
      If BloopTimer > 0 And BloopTimer < MilliSecs()
         If map(Kugel\X,Kugel\Y) = 0
            Delete Kugel
            BloopTimer = 0
         End If
      End If
   Next
End Function

Midimaster

BeitragSa, Jun 11, 2011 7:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, ist logisch....

denn wenn in dem unteren Teil einmal eine Kugel gelöscht wird, wird gleich bei der ersten gefundenen Kugel der Timer schon wieder auf Null gesetzt, so dass er bei der nächsten Kugel nicht mehr aktiv ist. Die Lösung wären zwei Schleifen:

BlitzBasic: [AUSKLAPPEN]

Function Kugeln_Delete ()
For Kugel.KugelTyp = Each KugelTyp
If Kugel\AnimY = Kugel\Y*32
If map(Kugel\X+1,Kugel\Y) = 1
If map(Kugel\X-1,Kugel\Y) = 1
If map(Kugel\X,Kugel\Y) = 1
map(Kugel\X,Kugel\Y) = 0
map(Kugel\X+1,Kugel\Y) = 0
map(Kugel\X-1,Kugel\Y) = 0
BloopTimer = MilliSecs () +1500
End If
End If
End If
End If
Next

If BloopTimer > 0 And BloopTimer < MilliSecs()
For Kugel.KugelTyp = Each KugelTyp
If map(Kugel\X,Kugel\Y) = 0
Delete Kugel
End If
Next
BloopTimer = 0
End If
End Function

Raiden93

BeitragSa, Jun 11, 2011 9:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Midimaster jetzt geht es und habe dazu gelernt Wink. Jetzt muss ich nur noch die Kugeln Kollisionen bearbeiten dann schaut das ganze schon viel Besser aus Razz

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group