ddi: Objekteigenschaften

Hallo,
ich programmiere gerade ein kleines JavaScript-Spielchen. Mehrere Objekte bewegen sich dabei in einem Raum und können kollidieren.

Dabei mal eine ganz grundsätzliche Frage. In diesem ProcessingJS Bouncing Ball Demo werden die Kollision innerhalb jeder Objektinstanz abgefragt. Die Kollisionsabfrage ist also eine Methode des Objektes Ball. Dazu wird dem Ball beim Instanzieren der Ball-Array (also die Gesamtheit aller Ballobjekte) übergeben, genauer gesagt eine Referenz auf diesen.

Macht das Sinn? Ich hätte jetzt eher gesagt, dass die Kollision bzw. das Kollidieren eine Methode der das Objekt umgebenden Welt bzw. dahingehend _nur_ die Kollidierbarkeit eine Eigenschaft des Objektes ist. Ein Objekt kann sich bewegen, hat verschiedene Eigenschaften etc., die Interaktion mit anderen Objekten sollte von aussen gesteuert werden.

Dazu bräuchte es ein Weltobjekt, in dem diese Dinge abgefragt werden.

Was sagt ihr dazu?

Beste Grüße
ddi

  1. Ich würde eine Methode bauen, die einen zweiten Ball bekommt und dann die Kollission berechnet. Aber ohne Array, was da miteinander getestet wird würde ich dem Aufrufer überlassen. Der kann durchaus eine Methode im Objekt sein (oder eine statische), eben da wo das Array gehalten wird.

  2. Hallo,

    Dass hier jeder Ball einen Verweis auf alle anderen Bälle besitzt, ist tatsächlich Quatsch und untergräbt die Kapselung und Objektorientierung. Die collide-Methode in der Instanz unterzubringen ist sinnvoll, wenn diese ein weiteres Objekt als Parameter erhält, wie Encoder auch sagt.
    Es ist üblich, Kollisionsabfragen als Instanzmethoden umzusetzen. Nur wird hier nicht bloß auf Kollision geprüft, sondern auch die daraus resultierende Anziehung bzw. Abstoßung hinzugefügt. Dein Modell halte ich daher auch für passend, also die Kräfte-Physik zwischen den Bällen auf einer darüberliegenden Ebene zu berechnen.

    Mathias