RectsOverlap funktioniert nicht
Übersicht

Sterbendes LüftleinBetreff: RectsOverlap funktioniert nicht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Text entfernt | ||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du mehrere objekt.Bau hast,
wird das ine oder andere nicht kollidieren und schon wird erstellt besser ist es erst mal nachsehen ob mindestens eins Kollidiert ansonsten erstellen etwa so Code: [AUSKLAPPEN] If bauauswahl = 1 Then
DrawImage(huette, MAUSX, MAUSY) For objekt.Bau = Each Bau kollision = RectsOverlap(MAUSX, MAUSY, ImageWidth(huette), ImageHeight(huette), objekt\xco, objekt\yco, objekt\breite, objekt\hoehe) If kollision = True Then Exit Next If kollision = 0 Then If MH1 Then MH1 = 0 objekt.Bau = New Bau objekt\xco = MAUSX objekt\yco = MAUSY objekt\breite = ImageWidth(huette) objekt\hoehe = ImageHeight(huette) objekt\inhalt = 1 EndIf EndIf EndIf mh1 = 0 |
||
[BB2D | BB3D | BB+]
|
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
So eine Konstruktion ist nur semi-optimal - kann man das nicht durch ein Array etwas eingrenzen? Informationen zum Aufbau wären da hilfreich. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
MCocktail |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Xeres: was meinst du mit eingrenzen durch ein Array?
Abgesehen davon müsste das funktionieren, könnte aber je mehr gebäude da sind, langsam werden. Und mich würde interresieren, was MH1 wäre? |
||
Gruß von: MCocktail |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Xeres meint, dass es etwas viel Arbeit ist, ALLE Objekte durchzusuchen ob eines kollidiert. (Wie du schon sagst, "könnte aber je mehr gebäude da sind, langsam werden")
Ein Array optimiert die Sache ganz einfach so: Du hast deine Objekte in einem Array und wenn du wissen willst ob an einer Position (Mauskoordinaten) ein Objekt ist fragst du einfach array(mausX,mausY)<>null ab. Grob gesagt. natürlich müsste man die Karte dafür "rastern" (Stichwort Tilemap) und das ist es eventuell was totensturm nicht will, aber das wär halt die "Array idee". Und MH1 ist wahrscheinlich MouseHit(1) ![]() |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn wir mal davon ausgehen, dass das Bauen ja nur auf User-Klick hinaus passiert dann ist die Lösung ausreichend schnell(selbst bei mehreren 1000 Gebäuden). Man muss ja nun auch nicht "überoptimieren"... | ||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guter Einwand - aber auch dazu müsste optimiert werden. Indem man die MH1-Abfrage "vorzieht" ![]() Wär vom Aufwand - Nutzen - Verhältnis wohl das beste, ja. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Addi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man könnte das Beschleunigen z.B. auch so machen, dass man 2 Listen hat, die 2te ist verlinkt und enthält nur die Objekte aus Liste1 die auf dem Bildschirm zu sehen sind, dann braucht man nur die durchgehen. Aber die Sache mit dem Array ist trotzdem besser, da man ja sicherlich auch scrollen muss. | ||
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
...und wie würdest du das in BlitzBasic bitte umsetzen, addi? | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Addi |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] Type house Aber stimmt, ist nicht ganz das was ich geschrieben habe, oder wie soll ich die Frage interpretieren *verwirrd*. |
||
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62 |
- Zuletzt bearbeitet von Addi am Mi, Apr 03, 2013 0:31, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Neben dem Aufwand alle Objekte durch zu gehen kommt dann nochmal der Aufwand, alle aktiven Häuser durch zu gehen... Ein Array kann man bei stationären Objekten einfach durch teilen der Koordinaten befüllen und prüfen.
Wenn man dann noch Interaktion haben möchte und nicht nur einmalig baut, wird das schon was ausmachen. Und klar ist auch: die schnellsten Abfragen zu erst ausführen. Sonst bringt das alles nichts. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Addi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Deswegen sagte ich ja auch, dass das Array besser ist. Meins bringt nur dann was, wenn man nur die braucht, die zu sehen sind, oder so etwas in der Art. | ||
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group