imagecollide bei selbst-/intern gezeichneten Dingen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Notbremse

Betreff: imagecollide bei selbst-/intern gezeichneten Dingen

BeitragFr, Apr 25, 2008 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollte heute ein kleines snake-Spiel ohne externe Grafiken machen. Dabei ist mir aufgefallen, dass ich gar nicht weiß wie ich eine Kollision von 2 Kreisen ,die ich mit BB gezeichnet habe, abfragen soll:

oval SpielerX, SpielerY , 40 ,40 1
oval FutterX , FutterY, 40 ,40, 1

imagescollide ( ?)



Was soll ich dann in die Klammern schreiben?
Verzeiht aber ich bin noch ziemlich neu Rolling Eyes
 

Tritium

BeitragFr, Apr 25, 2008 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Für zwei Kreise lässt sich auch der Satz des Pythagoras (wahrscheinlich steht das h jetzt genau an der falschen Stelle Wink ) anwenden:

Abstand der Kreise = Quadratwurzel((x1-x2)^2+(y1-y2)^2)

Als x1/x2/y1/y2 nimmst Du die Mittelpunkte der Kreise

Da Deine Kreise einen Radius von 20 haben, überprüfst Du, ob der Abstand <= 40 ist (wg. zwei Radien), dann berühren sich die Kreise nämlich.
 

Notbremse

BeitragSa, Apr 26, 2008 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich den Abstand prüfen?(Befehl?) Rolling Eyes
 

MadMental

BeitragSa, Apr 26, 2008 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hat dir Tritium doch eben gepostet:
Code: [AUSKLAPPEN]

abstand# = SQR#((x1-x2)^2+(y1-y2)^2)


MM

Eingeproggt

BeitragSa, Apr 26, 2008 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Abstand prüfen mit If.

Zu deiner ursprünglichen Frage mit ImagesCollide:
Das geht auch (wäre bei "komplexeren" Graphiken als Kreisen nötig)
Dazu musst du die Kreise in Images zeichnen und diese dann auf Kollision prüfen. Zum beispiel:
Code: [AUSKLAPPEN]
Graphics 800,600,0,2
spieler=CreateImage(40,40)
SetBuffer ImageBuffer(spieler)
Color 255,0,0
Oval 0,0,40,40,1
futter=CreateImage(40,40)
SetBuffer ImageBuffer(futter)
Color 0,0,255
Oval 0,0,40,40,1
SetBuffer BackBuffer()
Color 255,255,255

timer=CreateTimer(50)

Repeat
   
   ;Spielersteuerung musst du selber machen ;-)
   
   DrawImage spieler,SpielerX,SpielerY
   DrawImage futter,FutterX,FutterY
   
   If ImagesCollide(spieler,SpielerX,SpielerY,0,futter,FutterX,FutterY,0) Then
      Text 10,10,"Futter gefressen"
   EndIf
   
   WaitTimer timer
   Flip 0
   Cls
Until KeyHit(1)


mfG, Christoph.
 

Notbremse

BeitragSa, Apr 26, 2008 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja genau so was meinte ich. Vielen Dank Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group