Rectsoverlap zwischen zwei Types
Übersicht

![]() |
Progger93Betreff: Rectsoverlap zwischen zwei Types |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin beim Programmieren auf folgendes Problem gestoßen:
Der Type TPlane hat x,y,höhe und breite als variablen. Über diese wird überprüft ob ein TPlane mit einem anderem in derselben Liste kollidiert. Mit ein paar flugzeugen funktioniert dies auch recht gut...allerdings wenn es mehr als 20 werden geht es immer schlechter, auch die rote Hinterlegung bei einem Abstand von >75 pxl geht nichmehr. Ich weiß nicht woran es liegen könnte und habe auch die ganze kollision neu geschrieben. CodeTeil indem die Kollision überprüft werden: Code: [AUSKLAPPEN] Method crashcheck()
'alert=0 -> nix 'alert=1 -> rot hinterlegt -> zu nah(75pxls) 'collide=1 -> SpielEnde ^^ If landing=0 Then For Local pp:TPlane=EachIn planelist If pp<>Self If rectsoverlap(x,y,width,height,pp.x,pp.y,pp.width,pp.height) Then collided=1 EndIf Local dis:int=distance(pp.x,pp.y,x,y) If dis<75 Then alert=1 ElseIf dis>100 then alert=0 EndIf EndIf Next EndIf EndMethod Code indem die Funktionen Distance(x,y) und rectsoverlap(x1,y1,width1,height1,x2,y2,width2,height2) sind: Code: [AUSKLAPPEN] Function Distance:int(x1:int, y1:int, x2:int, y2:int)
Local disx:int = x2 - x1 Local disy:int = y2 - y1 Return Sqr(disx * disx + disy * disy) End Function Function rectsoverlap:int(x1:int, y1:int, width1:int, height1:int, x2:int, y2:int, width2:int, height2:int) If x1 + width1 > x2 And y1 + height1 > y2 And x1 < x2 + width2 And y1 < y2 + height2 Then Return 1 Else Return 0 EndIf End Function |
||
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was heißt denn, es geht "immer schlechter"? Klappt die Überprüfung gar nicht mehr oder wird alles einfach nur langsam? Könnte sein, da du z.b. bei 20 TPlane's 20 mal die Liste durchgehst und alles durchcheckst, das kann schon mal dauern und dementsprechend langsam werden.
Und wegen der roten Hinterlegung, das ist auch wenig schlecht gelöst, da z.b. ein TPlane im Abstand < 75 sein kann und die Hinterlegung rot färbt, dass nächste dann aber wieder einen Abstand > 100 hat und die Hinterlegung wieder weiß färbt, da du ja bei jedem TPlane die ganze Liste durchgehst. MfG DaysShadow |
||
Blessed is the mind too small for doubt |
![]() |
Progger93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht immer schlchter heißt, dass bei den meisten Flugzeugen die Überprüfung nichtmehr funktioniert und nur einige noch rot werden bzw. kollidieren.
Die Sache mit Dem alert werde ich wohl noch einmal überdenken. |
||
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe in meinem Type TAircarft eine Funktion mit dem Namen Update() was die macht ist wohl selbsterklärend sie geht alle Flugzeuge durch und bewegt diese.
Hier die Funktion die ich benutzte um sie (Pixelgenau)-Kollidieren zu lassen. BlitzMax: [AUSKLAPPEN]
|
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group