German Objektkollisionen

SirHarry

Member
Licensed User
Longtime User
Hallo

Ich arbeite an einer App, in welcher Objekte aus einer eigenen Klasse abgeleitet werden, wleche sich frei auf dem Screen(Panel) bewegen sollen. (Schafherde) Die Klasse generiert dazu Imageviews.
Dazu brauche ich eine Funktion oder eine Möglichkeit, welche Kollisionen mit anderen Objekten erkennt. Ich möchte möglichst strikt bei OOP bleiben und deshalb auch auf eine Datenbank verzichten welche im Hintergrund die Positionen der einzelnen Objekte speichert.
Eine Zugriff auf die Positionen der anderen Objekte aus der Klasse heraus schliesse ich eigentlich auch aus, denn dann müsste ich der Klasse ja einen Verweis auf die anderen Objekte freigeben. Das widerspricht aber OOP. Die einzelnen Objekte sind dann nicht mehr unabhängig, sondern nur noch in diesem speziellen Umfeld nutzbar.
Ich stelle mir sowas wie direktes Abfragen des Screens vor, ob da schon gesetzte Pixel sind, auf die das Objekt zurennt.
Ich habe dazu keine Idee. Kennt jemand eine solche Möglichkeit?
Falls nicht. Hat vielleicht jemand eine andere Idee dazu?
Oder macht man so etwas gar vollkommen anders?
 

pucki

Active Member
Licensed User
Longtime User
Vielleicht sehe ich das ja alles ein wenig zu locker aber ich würde es einfach so machen.

Ich würde ein Eindimensionales Array nehmen.
Ich weiß die Größe des Objekt und seine Position. Also muss ich nur sein Mittelpunkt errechnen und diese Punkt mit den Koordinaten auf den Screen in das Array ablegen, Wert bei jeder Bewegung es Objekt überschreiben. (Je Schaf eine Index im Array).

Nun eine Schleife aufrufen und dort seine Werten neuen Wert mit den Werten der anderen Schafe vergleichen.

Je nach Bedingung dann BUMS

Aber mir sagt man eh nach das ich noch konservativ nach uralter Logik code. ;)

Gruß

Pucki
 

SirHarry

Member
Licensed User
Longtime User
Ganz ehrlich?
Hatte ich zunächst genau so gemacht.
Gefiel mir aber nicht ;)
Dann hab ich 'ne SQL-DB benutzt. Aber die vielen Zugriffe auf die DB (Bei jedem Schritt mal Schafe) wirkten sich doch ab 20 Schafe ein wenig auf die Geschwindigkeit aus.
Und ich will ja ausserdem noch ein wenig einfache Intelligenz rein bringen (Schafe eben:))

Aber ich vermute mal, wenn ich nichts anderes finde werde ich wohl doch wieder auf das Array (oder besser eine List) zurück kommen.
 

pucki

Active Member
Licensed User
Longtime User
so coden würde ich das


B4X:
anzahl_schaf = 20
Array =  dim schaf(anzahl_schaf)


sub bewegen_eines_schafes ()

schaf(1) = pos_schaf_1
schaf(2) = pos_schaf_2
...
schaf_check (bewegtes_schaf) ' aufruf der sub

end sub


sub schaf_check(akt_schaf)

For  i = 1 to anzahl_schaf
  if not i = akt_schaf then
    if schaf(akt_schaf) < schaf(i) + gross_schaf  then ' bums_bedingung
      ' hier bumst es
    end if
  end if
next i
end sub



Gruß

Pucki

ps: ungetesteter code im VB-2010 Stil. Ich wollte dir nur die Logik zeigen


Alles andere sind objekte oder datenbanken.
 

SirHarry

Member
Licensed User
Longtime User
Na ja...
Mir geht es ja in erster Linie nicht darum ein Spiel zu entwickeln.
Mir geht es mehr darum, mittels OOP beliebig viele unterschiedliche Gestalten auf dem Bildschirm zu bewegen.
Etwa so, wie in dem alten Age of Ampires, wo die Objekte selbstständig agieren oder wie in Städtebausimulationen wie Caesar3.
In meinem Fall ist es also eine Schafherde.;)

Es geht also mehr darum, zu verstehen, wie das gemacht wird, als darum, mit einem Framework irgendetwas tolles zu gestallten.
Ich verzichte auch bei meinen Internetseiten auf die gängigen Frameworks.

Nichts für ungut.:)
Ein sicher gut gemeinter Tipp. Scheint eine interessante Sache zu sein.
Aber ich möchte es trotzdem lieber selber coden und verstehen, was da geschieht.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Top