type problem nr.2

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Schoasch

Betreff: type problem nr.2

BeitragSa, Apr 14, 2007 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
hi Wink also ich hab die Frage schon in dem kapitel Types??? gestellt aber dort hat sie glaub ich keiner gesehen xD also stell ich die Frage hier noch einmal

also ich hab die Übung schon ein wenig ausgebaut --> is schon son richtiges minigame nur fehlt mir noch der endgegner...den hab ich so gut wie fertig nur gibt es da ein winzig kleines prob. also man muss gegen den Boss wasserkugeln schießen und der schießt Feuerkugeln zurück...ich hab das mit den Leben und so schon fertig (außer das man nicht sterben kann aber das mach ich später, sonst kann man net gut testen) aber ich will das mit
Code: [AUSKLAPPEN]

If RectsOverlap(s\x,s\y,20,20,gs\x,gs\y,20,1) Then Delete gs.Schuss2 Delete s.Schuss

machen das wenn die sich überlappen, dass sie dann verschwinden. Ich hab mal versucht das wo einzubaun und hab das schon gehabt das die verschwinden aber wenn das gegangen is, hat was anderes VOLL gesponnen. ich hab wegen den 2 types (gegnerische schüsse, meine schüsse) zwei for-next schleifen gebraucht (For s.schuss = each schuss - For gs.schuss2 = each schuss) und in keine von den beiden kann ich den Befehl reingeben. hab schon probiert eine schleife in die andere zu geben... aber nie bin ich ans richtige ergebnis gekommen 
ich hoffe ihr könnt mir helfen, hier ist der code vom boss:
Code:
Function Bosseins(Wasservorrat)
aaa = 1
Leben = 3   
LebenF = 10
wzahler = 10
wzahler2 = 80
Repeat
Color 0,0,255

wzahler = wzahler + 1
   If wzahler >= 10 And wasservorrat > 0 And MouseHit(1) Or aaa = 1 Then
   wzahler = 0
   
      s.schuss = New schuss
       
      s\x = MouseX()
      If aaa = 1 Then s\x = - 50
      s\y = 600
      s\geschwindigkeit = 2
      wasservorrat = wasservorrat -1
      aaa = 0
       
   EndIf

wzahler2 = wzahler2 + 1
   If wzahler2 >= 80 Then
   wzahler2 = 0
       
      gs.schuss2 = New schuss2
       
      gs\x = Rnd(0,800)
      gs\y = - 20
      gs\geschwindigkeit = 1
       
   EndIf
   
Color 255,0,0

For gs.schuss2 = Each schuss2
      gs\y = gs\y + gs\geschwindigkeit
      Oval gs\x,gs\y,20,20,1   
      If gs\y >= 601 Then Leben = Leben - 1 Delete gs.schuss2


Next

Color 0,0,255   
   For s.Schuss = Each Schuss
      s\y = s\y - s\geschwindigkeit
      Oval s\x,s\y,20,20,1

      If RectsOverlap(s\x,s\y,20,20,0,0,800,50) Then
            LebenF = LebenF - 1
            Delete s.Schuss
      EndIf
   Next
   

Color 255,0,0
Rect 0,0,800,50
Color 0,255,0
Text 100,20,"Leben der Feuerwand: " + LebenF
Text 0,50, Leben
Color 50,50,255
Rect 5,590,Wasservorrat,10


Flip
Cls
Until KeyHit(1)

End Function


und hier die zwei types:

Type Schuss
Field x
Field y
Field Geschwindigkeit
End Type

Type Schuss2
Field x
Field y
Field Geschwindigkeit
End Type



danke schon mal im vorraus:
Schoasch

~Editiert~
[ code ] [ /code ] Tag angefügt. MfG D2006

mas93

BeitragSa, Apr 14, 2007 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Verwendest du für die Schüsse keine Bilder??
Falls ja, kannst du das ganz einfach mit if imagescollide machen.
Ich mein wenn du schon ein game daraus machen wilsst, wärs ja vllt besser wenn du n bild verwendest.

Was anderes fällt mir sonst auch nich ein, sry.

Aber noch was: Ich glaube, dass du nicht einfach nen neuen Thread mit dem gleichem Thema aufmachen darfst, nur weil es sich im alten Thread keiner mehr anschaut.


mfg marius
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

Schoasch

Betreff: aha

BeitragSa, Apr 14, 2007 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
aso Sad ok dann dürft ihr diesen Thread von mir aus löschen wenn ihr wollt. Also Bilder kommen eigentlich erst am Schluss :(aber mal gucken xD
 

Schoasch

BeitragMi, Apr 18, 2007 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
schade Sad

skey-z

BeitragMi, Apr 18, 2007 12:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Du sagst, dass folgende zeile nicht funktioniert, wenn du sie in beide schleifen einbringst:

Zitat:
If RectsOverlap(s\x,s\y,20,20,gs\x,gs\y,20,1) Then Delete gs.Schuss2 Delete s.Schuss


Aber du sagst nicht, was nicht funktioniert, gibt es keine kollision oder bekommst du ne fehlermeldung?
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

Schoasch

BeitragMi, Apr 18, 2007 12:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ja fehlermeldung- er sagt das das object nicht existiert (object does not excist) Sad

skey-z

BeitragMi, Apr 18, 2007 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist natürlich klar, weil das Objekt aus der ersten Schleife solange benötigt und geprüft wird, bis die 2. Schleife einmal ganz durch gelaufen ist, wenn du nun aber ein Objekt aus der ersten Schleife löscht, ist es nicht mehr existent und die nächste Prüfung ergibt einen Fehler.

Ich weiß nicht genau, ob es so funktioniert, aber kannst du ja mal ausprobieren:

setze hinter Delete (Objekt) ein "Exit" damit springst du aus der Schleife und es beginnt die nächste, wenn ein Exit nicht reichen sollte probier es mal mit 2en.

Ansonsten bringe eine Hilfsvariable mit ein, die nur 0 oder 1 zugewiesen bekommt, sollte eine Kollision stattfinden, ädere den Wert diese Eintrags und am Ende der Schleife prüfst du diese Variable und wenn sie den gewissen wert(0 oder 1) hat, dann löscht du sie erst, somit ist das Objekt bei allen Prüfungen existent und es kommt zu keinem Fehler mehr.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group