Kollisions abfrage Fehler

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Yankee

Betreff: Kollisions abfrage Fehler

BeitragMi, Mai 03, 2006 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich habe da ein problem mit meiner kollisionsabfrage. Ich abeite gerade an einen Asteroiden Spiel und wollte mal schauen, wie es schon ausschaut....Aber wie immer klappt es beim ersten mal net^^ Sad

Die schüsse und die Asteroiden werden mit Types geladen/gesetzt und dann wollte ich abfragen, ob die raketen mit den Asteroiden kolidieren...
Hier der Code:
erst alles setzten und laden:
Code: [AUSKLAPPEN]

Type asteroid
   Field x
   Field y
   Field speed
   Field nr
End Type

Type schuss
   Field x
   Field y
End Type

Und dann in einer Funktion abfragen:
Code: [AUSKLAPPEN]

Function schuesse()
   ;die meinen schüsse
   For neu.schuss = Each schuss
      neu\y = neu\y - 4
      DrawImage bullet, neu\x, neu\y
      For ast.asteroid = Each asteroid
         For i = 0 To 9
            If ImagesCollide(schuss,neu\x,neu\y,0,asteroid(ast\nr),ast\x,ast\y,0) Then
               PlaySound treffer
               Delete neu.schuss
               Delete ast.asteroid
            EndIf
         Next
      Next
   Next
   
   ;damit unsere schüsse nicht zu weit fliegen(aus dem bildschirm)
   For neu.schuss = Each schuss
      If neu\y < 0 Then Delete neu.schuss
   Next

End Function

Function asteroids()

   ;eine zufälligen wert ihrgendwo...
   neuer = Rnd(0,10)
   
   ;wenn neuer die zahl ist, dann ein neuer zufälliger asteroid
   If neuer = 10 Then
      zfg = Rnd(0,9)
      ast.asteroid = New asteroid
      ast\x = Rnd(0,610)
      ast\y = 0
      ast\speed = Rnd(2,10)
      ast\nr = Rnd(0,9)
   EndIf
   
   For ast.asteroid = Each asteroid
      ast\y = ast\y + ast\speed
      If ast\y > 480 Then Delete ast.asteroid
      DrawImage asteroid(ast\nr)
   Next
   
End Function

 


Wisst ihr wo ad der Fehler ist?
Währe sehr dankebar, wenn mir da jmd helfen würde.

Danke im vorraus,

Yankee

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Mai 03, 2006 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine genaue Fehlerbeschreibung wäre einfacher!
Was sagt dir denn der Debugger....."Objekt does not exist" wahrscheinlich oder?

BlitzBasic: [AUSKLAPPEN]

Function schuesse()
;die meinen schüsse
For neu.schuss = Each schuss
neu\y = neu\y - 4
DrawImage bullet, neu\x, neu\y
For ast.asteroid = Each asteroid
; For i = 0 To 9 ; nicht relevant da i nicht benutzt wird
; hier mußt du das schussBild nehmen
If ImagesCollide(bullet, neu\x, neu\y,0,asteroid(ast\nr),ast\x,ast\y,0) Then
PlaySound treffer
Delete neu.schuss ; wenn diese gelöscht wird muß die Schleife" ast.asteroid = Each..." verlassen werden
; denn wenn der Schuss gelöscht wird kannst du ihn nicht mehr ansprechen um ihn mit dem nächsten Asteroid zu prüfen
Delete ast.asteroid
Exit ;Schleife Verlassen und zum nächsten Schuss
EndIf
;Next
Next
; hier geht es nach exit weiter zum nächsten Schuss
Next


Hier dann nochmal ein ähnliches Problem
BlitzBasic: [AUSKLAPPEN]

For ast.asteroid = Each asteroid
ast\y = ast\y + ast\speed
If ast\y > 480 Then Delete ast.asteroid
;swenn der Schuss gelöscht wird, darfst du ihn nicht mehr malen, da ast.Arteroid = Null ist

;entweder erst malen und dann löschen, oder prüfen ob dieser Type Exitiert
If ast.asteroid <> Null Then DrawImage asteroid(ast\nr)
Next
[BB2D | BB3D | BB+]

Yankee

BeitragMi, Mai 03, 2006 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy Dankeeeeee Very Happy
Jetzt bin ich schon viel weiter, aber jetzt kommt immer bei dem Schuss der Fehler, also da:
Code: [AUSKLAPPEN]

   For ast.asteroid = Each asteroid
      ast\y = ast\y + ast\speed
      If ast\y > 480 Then Delete ast.asteroid
      If ast.asteroid <> Null Then
         DrawImage asteroid(ast\nr), ast\x, ast\y;Hier
      EndIf
   Next

der Fehler"Function not found"......
Weis wer warum?

Danke im Vorraus,

Yankee
Um so kleiner der code, um so schwieriger den Fehler zu finden:


Siehst du den Fehler?
Klick mal hier drauf... hehehe
 

ke^kx

BeitragMi, Mai 03, 2006 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erstmal solltest du ast.asteriod globaln. Und dann musst du das astereoid () aus dieser Zeile logischerweiße entfernen, denn was soll das bewirken? Also manchmal sollteset du auch selber denken Confused

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Mai 03, 2006 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Wenn du eine For each schleife benutzt, muß das nicht global sein!
2. Wenn du innerhalb dieser Schleife eine Function mit Parameter übergabe machst muß das auch nicht global sein.

so, zu deinem Problem, wie sieht die Zeile aus wo du das Bild von deinem Asteroiden lädst?
Ich habe angenommen das du das in einem Array geladen hast!
Asteroid(0) = loadimage(bla bla)

Aber so scheint es nicht zu sein, da du diesen Fehler bekommst!
Abgesehen davon sollte man auch type und Arrays nicht den gleichen Namen geben!

BlitzBasic: [AUSKLAPPEN]

Global Bildhandle = LoadImage (xyz)
..
..
DrawImage Bildhandle, ast\x, ast\y;Hier
[BB2D | BB3D | BB+]

Yankee

BeitragDo, Mai 04, 2006 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked
Also ich lade das Bild so:

Code: [AUSKLAPPEN]

Global asteroid0 = LoadImage("graphics\Asteroid1.bmp")


insgesamt 10 mal also 0-9

Und dan will ich das Bild malen so:
Code: [AUSKLAPPEN]

   For ast.asteroid = Each asteroid
      ast\y = ast\y + ast\speed
      If ast\y > 480 Then Delete ast.asteroid
      If ast.asteroid <> Null Then
         DrawImage asteroid(ast\nr)
      EndIf
   Next

Und ich bekomme ja das asteroid(ast\nr) schon von dem Type....
Also was ist den da jetzt nun der Fehler?

Danke,

Yankee
Um so kleiner der code, um so schwieriger den Fehler zu finden:


Siehst du den Fehler?
Klick mal hier drauf... hehehe
 

ke^kx

BeitragDo, Mai 04, 2006 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach, so hast du das geladen... Da muss ich auch erstmal drauf kommen Smile

Dann ist dein Fehler klar. Was du möchtest ist ein ql:Dim. Das heißt, du musst bei deinem Lade Code das ganze etwa so machen:

Code: [AUSKLAPPEN]
Dim asteroidbild(9)
asteroidbild(0) = LoadImage("graphics\Asteroid1.bmp")
asteroidbild(1) = LoadImage("graphics\Asteroid2.bmp")
.
.
.


Das ganze geht auch in einer Schleife (wenn ich davon ausgehe, dass deine Asterioiden Bilder bei 1 anfangen und bei 10 aufhören:

Code: [AUSKLAPPEN]

Dim asteroidbild(9)

For i = 1 to 10
 
 asteroidenbild(i-1) = LoadImage("graphics\Asteroid" + i + ".bmp")

Next


Btw als verständnisfrage: Was genau soll diese Prüfung mit "<> Null" Es ist eigentlich viel einfacher erst zu malen und dann zu löschen. Hm, wobei mir gerade auffällt, dass der Player dann z.B. zu viel Lebensenergie verlieren könnte, da der Asterioid noch gezeichnet wird... Obwohl, eigenlich nicht.

Also ich verstehe es nicht so ganz^^

@Rallimen:
Achso, das hab ich nicht gewusst Wink

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Yankee

BeitragDo, Mai 04, 2006 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy
JUHU, habe ich mir gedacht, als kein Fehler kam, doch dann kam natürlich wie immer ein Fehler...^^ Mad
Nähmlich "Image does not exist"
Und ich weis net warum...
Wisst ihr warum?
Der Fehler kommt immer hier:
Code: [AUSKLAPPEN]

   For ast.asteroid = Each asteroid
      ast\y = ast\y + ast\speed
      If ast\y > 480 Then Delete ast.asteroid
      If ast.asteroid <> Null Then
         DrawImage asteroid(ast\nr), ast\x, ast\y;hier kommt der Fehler immer
      EndIf
   Next


Bitte nochmal helfen^^

Danke,

Yankee
Um so kleiner der code, um so schwieriger den Fehler zu finden:


Siehst du den Fehler?
Klick mal hier drauf... hehehe

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Mai 04, 2006 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
der Fehler liegt garantiert daran das das Bild nicht in diese asteroid(ast\nr) geladen wurde!
asteroid(0) = Loadimage ("Arteroid.bmp")
Wenn das nicht so geladen wurde dann gehts mit Drawimage auch nicht!

Beispiel wie es generel geht:
BlitzBasic: [AUSKLAPPEN]

Global Bild =LoadImage ("MeinBild.bmp")
If Bild = 0 Then Runtimeerror"Das Bild <MeinBild.bmp> konnte nicht geladen werden"
...
...
...
DrawImage bild, x,y
[BB2D | BB3D | BB+]

Yankee

BeitragDo, Mai 04, 2006 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
grml....
Jetzt hab ich des mit dem Runtimeerror auch schon versucht, aber es klappt net.
Der runtimeerror sagt nichts, aber dann später wo er dann bei dem drawimage(ast\nr) ist, kommt wieder der Fehler.

Es klappt so. hier der Beweis^^.
Code: [AUSKLAPPEN]

Dim teil(9)

For n = 0 To 9
   teil(n) = False
Next

fire = 0

SetBuffer BackBuffer()

Repeat
   
   Cls
   
   If KeyHit(57) Then
      If teil(fire) = False Then
         fire = fire + 1
         teil(fire) = True
         If fire = 10 Then fire = 0
      Else
         teil(fire) = True
      EndIf
   EndIf
   
   For n = 0 To 9
      If teil(fire) = True Then
         Text 10,(20*(fire)), "Teil " + (fire) + " = True"
      ElseIf teil(fire) = False Then
         Text 10,(5*(fire)), "Teil " + (fire) + " = True"
      EndIf
   Next
   
   Flip
   
Until KeyHit(1)

End


Hoffe der klappt...^^

Aber kann mir jetzt jmd sagen, wieso des jetzt immer noch net klappt?

Danke,

Yankee
Um so kleiner der code, um so schwieriger den Fehler zu finden:


Siehst du den Fehler?
Klick mal hier drauf... hehehe
 

ke^kx

BeitragFr, Mai 05, 2006 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann guck mal in den Werten welchen Wert asteroid/nr gerade hat (am besten du legst zu testzwecken eine Variable an), wenn der Error kommt. Und dann vergleich ob das hinhaut.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Yankee

BeitragMo, Mai 08, 2006 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
grml....
Am anfang kommen ein paar Asteroiden, doch dann kommt der Fehler schon wieder. Mist.

Hilfe!

Weis jmd wieso das andauernd passiert?

Danke,

Yankee
Um so kleiner der code, um so schwieriger den Fehler zu finden:


Siehst du den Fehler?
Klick mal hier drauf... hehehe
 

ke^kx

BeitragDi, Mai 09, 2006 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Lad doch mal das gesamte Teil mit bildern und Sounds usw im Archiv hoch. Dann kann ich mal schaun Wink

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Yankee

BeitragMi, Mai 10, 2006 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
OK habs im Archiv drinne... Is aber noch net sehr weit, also noch fast garnichts, weil ich wollte, dass ich immer erst die Probleme wegschaffe, bevor ihrgendwas anderes^^


schaus dir doch bitte mal an,

danke,


Yankee
Um so kleiner der code, um so schwieriger den Fehler zu finden:


Siehst du den Fehler?
Klick mal hier drauf... hehehe

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Mai 10, 2006 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin gerade dabei es zu testen...
1. du hast nur 5 Asteroidenbilder und versuchst 9 zu laden
BlitzBasic: [AUSKLAPPEN]

For n = 0 To 4
asteroid(n) = LoadImage("graphics\Asteroid"+(n+1)+".bmp")
If asteroid(n) =0 Then Stop
Next

2. hier fehlt das n+1BlitzBasic: [AUSKLAPPEN]

For n = 0 To 5
powerpup(n) = LoadImage("graphics\Punkt"+ (n+1) +".bmp")
Next

3. bei der Kollsion mußtdu das Bildhandle nehmen
BlitzBasic: [AUSKLAPPEN]
For neu.schuss = Each schuss
neu\y = neu\y - 2
DrawImage bullet, neu\x, neu\y
For ast.asteroid = Each asteroid
If ImagesCollide(bullet,neu\x,neu\y,0,asteroid(ast\nr),ast\x,ast\y,0) Then
PlaySound treffer
Delete neu.schuss
Delete ast.asteroid
Exit
EndIf
Next
Next

4. die Zuweisung mußt du auch an die Bilder Anzahl anpassen
BlitzBasic: [AUSKLAPPEN]
ast\nr = Rnd(0,4)

So es läuft einiigermaßen wenn du diese Änderungen machst!
[BB2D | BB3D | BB+]
 

ke^kx

BeitragDo, Mai 11, 2006 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, jetzt hat es Rallimen ja schon gemacht Wink Ist auch gut so, ich hatte nämlich nicht so viel Zeit wegen meinen Prüfungen...

Sorry trotzdem, da ich mich ja eigentlich "gemeldet" habe um es zu korrigieren Smile ich hoffe du kannst mir verzeihen.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Yankee

BeitragDo, Mai 11, 2006 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
JUHU!!!!

Danke an euch alle!

Endlich klappt es, nur jetzt habe ich das problem, dass zu viele Asteroiden kommen^^.

Aber keine sorge, das schaffe ich schon alleine....


Danke an euch,



Yankee
Um so kleiner der code, um so schwieriger den Fehler zu finden:


Siehst du den Fehler?
Klick mal hier drauf... hehehe

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group