RectsOverlap funktioniert nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Sterbendes Lüftlein

Betreff: RectsOverlap funktioniert nicht

BeitragDi, Apr 02, 2013 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Apr 02, 2013 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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+]

Xeres

Moderator

BeitragDi, Apr 02, 2013 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

MCocktail

BeitragDi, Apr 02, 2013 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDi, Apr 02, 2013 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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) Wink
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

BIG BUG

BeitragDi, Apr 02, 2013 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Apr 02, 2013 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Guter Einwand - aber auch dazu müsste optimiert werden. Indem man die MH1-Abfrage "vorzieht" Wink
Wär vom Aufwand - Nutzen - Verhältnis wohl das beste, ja.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Addi

BeitragDi, Apr 02, 2013 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Xeres

Moderator

BeitragMi, Apr 03, 2013 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
...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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Addi

BeitragMi, Apr 03, 2013 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Type house
...
End Type

Type aktivHouse
Field house.house
End Type

;Blablabla Funktionen
...


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

Xeres

Moderator

BeitragMi, Apr 03, 2013 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Addi

BeitragMi, Apr 03, 2013 0:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group