Kollisionsproblem
Übersicht

mpcoolBetreff: Kollisionsproblem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
z.B. mit
ql:Imagerectcollide Damit kannst du ein Image mit einem Rechteck überprüfen lassen. |
||
![]() |
BigMaexle |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group