Kollision zweier Type-Images

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ReLeNtLeSS

Betreff: Kollision zweier Type-Images

BeitragSa, Dez 15, 2007 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
HeyHo,
ich habe folgendes Problem, und zwar möchte ich Images zweier unterschiedlicher Types kollidieren lassen, allerdings bekomme ich bei dem Code ein "Memory access violation"....

Code: [AUSKLAPPEN]

 For cam.camel = Each camel
 For info.auto = Each auto
   If ImagesCollide(autoruck,info\car_x,info\car_y ,0,camel,cam\camel_x,cam\camel_y,0) Then
     If cam\check_kolli2=0 And info\check_kolli1=0 Then
       cam\check_kolli2=1
       info\check_kolli1=1
       DrawImage cameltot,cam\camel_x,cam\camel_y
       Delete cam.camel
       PlaySound cameltot_s
       EndIf
     Else
       cam\check_kolli2=0
       info\check_kolli1=0
   EndIf
 Next
 Next


Die beiden Types:

Code: [AUSKLAPPEN]

Type auto
 Field car_x
 Field car_y
 Field points_check
 Field check_kolli1
End Type

Type camel
 Field camel_x
 Field camel_y
 Field points_camel
 Field check_kolli2
End Type

Xeres

Moderator

BeitragSa, Dez 15, 2007 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde ja erst mal Vorschlagen, die Variable für den Type "camel" und für das Bild unterschiedlich zu benennen.

Edit:
Achja; In welcher Zeile gibts den MAV? Steht das ganze in ner Funktion und die Bilder sind nicht global?
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)

ReLeNtLeSS

BeitragSa, Dez 15, 2007 23:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Bilder werden Global geladen und die Kollisionen stehen in einer Function...

/EDIT: Das ganze sieht jetzt so aus:

Code: [AUSKLAPPEN]

Function kollisionen()


 For info.auto = Each auto
    If ImagesCollide(auto,autox,autoy,0,autoruck,info\car_x,info\car_y ,0) Then       
     DrawImage crash,450,450
      If info\points_check=0 Then
         info\points_check=1
         crashcount=crashcount+1
         points=points-10
         PlaySound crash_s_1
      EndIf
    Else
      info\points_check=0
    EndIf
 Next

 For cam.camel= Each camel
    If ImagesCollide(auto,autox,autoy,0,camelbild,cam\camel_x,cam\camel_y,0) Then
       If cam\points_camel=0 Then
          cam\points_camel=1
          DrawImage cameltot,cam\camel_x,cam\camel_y
          Delete cam.camel
          points=points+20
          PlaySound cameltot_s
       EndIf
    Else
       cam\points_camel=0
    EndIf
 Next

 For cam.camel = Each camel
 For info.auto = Each auto
   If ImagesCollide(autoruck,info\car_x,info\car_y,0,camelbild,cam\camel_x,cam\camel_y,0) Then
     If cam\check_kolli2=0 And info\check_kolli1=0 Then
       cam\check_kolli2=1
       info\check_kolli1=1
       DrawImage cameltot,cam\camel_x,cam\camel_y
       Delete cam.camel
       PlaySound cameltot_s
       EndIf
     Else
       cam\check_kolli2=0
       info\check_kolli1=0
   EndIf
 Next
 Next
 

End Function


Geht aber nicht...[/code]

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Dez 16, 2007 1:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Fehler der mir sofort ins Auge stach
Code: [AUSKLAPPEN]
Delete cam.camel


Danach ist die cam.camel = null da sie gelöscht würde und die nächste innere Abfrage kann dann nicht funktionieren.

endweder ausserhalb der Schleife löschen oder zum nächsten cam wechseln

eine möglichkeit wäre es die Schleifen zu tauschen
Code: [AUSKLAPPEN]
 For info.auto = Each auto
 For cam.camel = Each camel

da hier automatisch zur nächsten cam gewechselt wird
[BB2D | BB3D | BB+]

ReLeNtLeSS

BeitragSo, Dez 16, 2007 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist KEIN Fehler. Es kommt immerwieder ein neues Camel. Wieso sagt mir jeder das das ein Fehler ist? Es funktioniert. Nur die Kollision der Types nicht...

Xeres

Moderator

BeitragSo, Dez 16, 2007 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Rallimen hat aber recht würd ich meinen ^^
Erweiter den camletype um die Variable "die", statt delete setzt du die=1 und ganz am ende der Updateschleife für camel deletest du alles, was die=1 ist... so geh ich diversen Problemen damit aus dem Weg.
Du kannst dir beim Debuggen doch den Inhalt der Variablen anschauen, vielleicht gibt das noch einen Hinweis woran es liegt?
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)

ReLeNtLeSS

BeitragSo, Dez 16, 2007 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich lasse das mit dem Delete so, weil es wunderbar klappt, aber danke für die Alternativen...

Also, der Debugger sagt an dieser Stelle:

Code: [AUSKLAPPEN]

If ImagesCollide(auto,autox,autoy,0,autoruck,info\car_x,info\car_y ,0) Then


"Object does not exist"

Weis nich was da nich existen soll oO

Xeres

Moderator

BeitragSo, Dez 16, 2007 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann klick mal Rechts im Debugger die Variablen an und stell alle Werte rein, die die haben...
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)

ReLeNtLeSS

BeitragSo, Dez 16, 2007 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich soll die ganzen Variablen abschreiben? Fällt da nich irgendwem einfach das Problem auf Confused

Danke...

Xeres

Moderator

BeitragSo, Dez 16, 2007 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du nicht vernüftig alle Daten aus dem Debugger angeben willst, könnte das u.U. schwieriger werden.
... die Variablen aus der Zeile Code: [AUSKLAPPEN]
If ImagesCollide(auto,autox,autoy,0,autoruck,info\car_x,info\car_y ,0) Then
würden ja vollkommen ausreichen...
Die Bilder müssen <> 0 sein und die anderen Variablen sinnvolle Werte einnehmen...
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)

ReLeNtLeSS

BeitragSo, Dez 16, 2007 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
aso meinst du das.
ja wartet ich kopier sie rein...

mom... info.auto -> gute werte

cam.camel = (Null)

?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Dez 16, 2007 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
If ImagesCollide(auto,autox,autoy,0,autoruck,info\car_x,info\car_y ,0) Then

bist du dir sicher das das an der Zeile liegt, denn wenn
Zitat:
mom... info.auto -> gute werte

hat, dann ist es kein
Zitat:
"Object does not exist"



Zitat:
Das ist KEIN Fehler. Es kommt immerwieder ein neues Camel. Wieso sagt mir jeder das das ein Fehler ist? Es funktioniert. Nur die Kollision der Types nicht...

du hättest recht wenn hinter
Zitat:
Delete cam.camel
PlaySound cameltot_s
ein EXIT stehen würde
[BB2D | BB3D | BB+]

ReLeNtLeSS

BeitragSo, Dez 16, 2007 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie geil
Danke Rallimen mit dem kleinen EXIT funzt es Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group