Kollisionsproblem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

mpcool

Betreff: Kollisionsproblem

BeitragMi, Jan 16, 2008 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann man einen Schuss mit einem Rechteck Kollidieren lassen?
Also mit ImageRectCollide weiß ich ja, aber der überprüft das dann ja nur mit einem Bild, aber ich will das er ein Oval und ein Rechteck überprüft, könnte mir jemand ein Beispielcode geben?

The_Nici

BeitragMi, Jan 16, 2008 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
z.B. mit
ql:Imagerectcollide

Damit kannst du ein Image mit einem Rechteck überprüfen lassen.

BigMaexle

BeitragMi, Jan 16, 2008 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfache Methode:
Du erstellst aus dem Oval ein Bild (ql:createimage, ql:Imagebuffer)und überprufst es dann mit ImageRectCollide

Elegantere Methode:

Du rechnest mathematisch mithilfe des radiusses aus, ob ein Teil des Ovals in das Gebiet des Rechteckes hineinzeigt. Bei Kreisen geht das noch, allerdings brauchst du bei Ovalen noch komplizierte Berechnungen, mit denen ich nicht dienen kann.

Deshalb würde ich die leichtere Methode 1 bevorzugen Laughing

PS: war der 2. Satz ein EDIT? denn sonst hätte the_nici sicherlich nicht seinen Post gepostet. wenn ja, markiere das bitte mit "Edit:" oder so. erzeugt nur Missverständnisse (wie bei mir, als ich es das 1. Mal das gelesen hab)
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber

The_Nici

BeitragDo, Jan 17, 2008 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
BM: Nein, wars nicht. ImageRectcollide ist immernoch genug schnell. Es gibt auch keine spezielle "Oval->Rect" Kollision, da dies einfach mit ImageRectCollide zu lösen ist.

MfG
 

E. Urbach

ehemals "Basicprogger"

BeitragDo, Jan 17, 2008 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es sich um einen Kreis handelt, dann kann ich dir diese Funktionen anbieten:

BB:
Code: [AUSKLAPPEN]
;RectCircleIntersect
Function RectCircleIntersect(rectX, rectY, rectWidth, rectHeight, circleX, circleY, circleRadius)
   tX = circleX
   tY = circleY
   
   If tX < rectX Then tX = rectX
   If tX > rectX + rectWidth Then tX = rectX + rectWidth
   If tY < rectY Then tY = rectY
   If tY > rectY + rectHeight Then tY = rectY + rectHeight
   
   Return ((circleX - tX) * (circleX - tX) + (circleY - tY) * (circleY - tY)) < circleRadius * circleRadius
End Function

C++:
Code: [AUSKLAPPEN]
//RectCircleIntersect
template <typename rectPosT, typename circlePosT, typename circleRadiusT>
inline bool RectCircleIntersect(rectPosT rectX, rectPosT rectY, rectPosT rectWidth, rectPosT rectHeight, circlePosT circleX, circlePosT circleY, circleRadiusT circleRadius)
{
   circlePosT tX = circleX;
   circlePosT tY = circleY;
   
   if(tX < rectX)
      tX = rectX;
   if(tX > rectX + rectWidth)
      tX = rectX + rectWidth;
   if(tY < rectY)
      tY = rectY;
   if(tY > rectY + rectHeight)
      tY = rectY + rectHeight;
   
   return ((circleX - tX) * (circleX - tX) + (circleY - tY) * (circleY - tY)) < circleRadius * circleRadius;
}
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group