Probleme mit Kollision

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Baret

Betreff: Probleme mit Kollision

BeitragDo, Dez 09, 2004 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich habe in einigen Versuchsprogrammen schon Kollisionsabfragen ausprobiert. Es hat auch immer funktíoniert aber irgendetwas klappt in meinem Rennspiel nicht!

Vielleicht könnt ihr euch den Code mal ansehen.

Es kann eigentlich nur an folgendem Code liegen:

Die Abfragen:

Code: [AUSKLAPPEN]

         Local kolly=100
         Local kollx=10
         For u=1 To 7
            For i=1 To 11
               If car_posx>=kollx And car_posx<=(kollx+71) And car_posy>= kolly And car_posy <= (kolly+71) Then
                  If ImagesCollide(coll,kollx,kolly,0,auto(auto_winkel),car_posx,car_posy,0) Then
                     speed=0
                  EndIf
                  Goto KollEnde
               EndIf
               kollx=kollx+71
            Next
            kollx=10
            kolly=kolly+71
         Next
         .KollEnde


Zur Erklärung: Dise For...Next "Abfragen" verwende ich weil ich die Bilder in so einer Art Raster angebracht habe. Dieser Raster ist 11 Spalten breit und 7 Zeilen hoch. Ein Bild hat die Maße 71*71 pixel

Mit folgender Funktion zeichne ich die Strecke:

Code: [AUSKLAPPEN]

If Typ=0 Then
      DrawImage coll,x,y
ElseIf Typ=1 Then
      ;DrawImage kurve_ur,x,y
ElseIf typ=2 Then
      ;DrawImage kurve_lu,x,y
ElseIf typ=3 Then
      ;DrawImage kurve_ro,x,y
ElseIf typ=4 Then
      ;DrawImage kurve_ol,x,y
ElseIf typ=5 Then
      ;DrawImage senk,x,y
ElseIf typ=6 Then
      ;DrawImage zielsenk,x,y
      startx=x+40
      starty=y+40
      zieltyp=1
      winkel=0
ElseIf typ=7 Then
      ;DrawImage waag,x,y
ElseIf typ=8 Then
      ;DrawImage zielwaag,x,y
      startx=x+40
      starty=y+40
      zieltyp=2
      winkel=270
EndIf


Was mache ich falsch?

Edit: Hab vergessen zu sagen was überhaupt das Problem ist:
Das Auto kollidiert die ganze Zeit!



Vielen Dank im Voraus!
Mfg
Baret

Ralf

BeitragFr, Dez 10, 2004 0:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

da ist ein Denkfehler drin:
Wenn ich das richtig verstanden habe, setzt Du den Schirm voll mit 71x71 großen Tiles.
Ich habe in Deinem Code mal kommentiert was da passiert:

BlitzBasic: [AUSKLAPPEN]
         Local kolly=100
Local kollx=10
For u=1 To 7
For i=1 To 11
; Hier fragst Du für jedes Feld ab, ob das Auto sich darin befindet-------
If car_posx>=kollx And car_posx<=(kollx+71) And car_posy>= kolly And car_posy <= (kolly+71) Then
; wenn ja(in einem Feld befindet sich das Auto ja zwanksläufig) fragst Du ab ob an dieser Stelle eine Kollision stattfindet, wenn an dieser Stelle die Grafik \"Coll\" wäre, was aber nicht bewiesen ist! Also muss immer eine Kollision bei rauskommen!
If ImagesCollide(coll,kollx,kolly,0,auto(auto_winkel),car_posx,car_posy,0) Then
speed=0
EndIf
Goto KollEnde
EndIf
kollx=kollx+71
Next
kollx=10
kolly=kolly+71
Next
.KollEnde


Mache lieber mit Dim ein Array, in Deinem Fall Dim feldinhalt(77).
1 wäre oben links, 2 rechts daneben, usw. für alle Felder bis 77 unten rechts.
Dann setzt Du meinetwegen 0 für die Grafik "Coll", 1 für die Grafik "kurve_ur" unsw. für jedes Feld.
Das alles machst Du vor dem Hauptprogramm, das hat den Vorteil das Du im Hauptprogramm viel weniger Code hast.
Dort brauchst Du nur noch die Position des Autos berechnen, etwa so:
Code: [AUSKLAPPEN]
 position=(car_posy / 71 * 11) -11 + (car_posx / 71)

Dadurch erhältst Du immer einen Wert von 1 bis 77, jenachdem im welchem Feld sich das Auto befindet.
Jetzt brauchst Du nur noch abfragen ob feldinhalt(position)=0 ist, und schon weisst Du ob das Auto sich auf der Grafik "coll" befindet.
Ist dies der Fall kannst Du die Formel oben wieder umrechnen, um die x+y Kordinaten des Feldes zu ermitteln, oder Du speicherst diese auch für jedes Feld in ein Array.
Mit diesen Werten machst Du dann Deine Kollisionsabfrage.

Ich hoffe das ist einigermaßen Verständlich rüber gekommen.

Ralf

Baret

BeitragSo, Dez 12, 2004 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Es funktioniert! Razz

VIELEN DANK für deine Hilfe!

Mfg
Baret

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group