Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

De_Struktor

unregistriert

1

24.07.2013, 16:47

Collision als Klasse oder Methoden in Spielerklasse??

Hallo Liebe Community,

ich habe mir meinen Code mal so angeschaut und bemerkt, das ich die Kollision sich in Form von Methoden befindet.

Meine Frage an euch, sollte ich auf Basis der OOP, eine Schnittstelle, Klasse oder doch nur wie es momentan aussieht, in Form von Methoden in der Klasse, die Kollision definieren?

Ich kann mir grad dazu nicht so ganz vorstellen, wie ich das in ein vernünftiges Klassendesign umsetzen sollte, denn:

1. Spieler sollte nicht von Kollision erben, da der Spieler keine Kollision ist.
2. Spieler kann auch keine Kollision haben. (hat eine Beziehung würde auch wenig Sinn machen)
3. Kollisionsklasse statisch definieren und nicht per Objekt, denn das wäre schlicht unlogisch, da Kollision etwas <<abstraktes>> ist.----->(nichts materielles)

4. Ein Interface mit den jeweiligen Methoden definieren. Das wäre aber eigentlich nix anderes als Mehrfachvererbung.
Denn ob ich die Kollsion "implementiere" oder davon "ableite", beides ist im Bezug auf Kollision, auf Basis der OOP unzulässig. Wenn ich mich irre, dann tut es mir leid.

ich hoffe auf einige Vorschläge von erfahrenen Entwicklern :)



P.s( ich habe auch schon einiges dies bezüglich gesehen und zwar lösen bisher alle das mit einer Klasse, sprich entweder erben sie davon oder wenden die hat eine Beziehung drauf an. Mir jedoch scheint beides Unfug, wie gesagt, wenn ich mich komplett irre, dann bitte ich um Nachsicht und Vorschläge

Mfg

De_Struktor

2

24.07.2013, 17:04

Naja du könntest ja eine (abstrakte) Collider-Klasse machen, und davon dann RectCollider, CircleCollider etc ableiten.
Dann könntest du ja eine hat-Beziehung machen, da ein Spieler sehr wohl einen Collider haben kann ;)
So ist es zumindest in Unity soweit ich weiss :)

De_Struktor

unregistriert

3

24.07.2013, 17:05

Ach ja, ich vergesse auch immer die technologien die ich benutze auf zu listen, sry an dieser Stelle:

C# ----> XNA 4.0

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

4

24.07.2013, 17:27

Naja da gibt es unterschiedliche Herangehensweisen.

Meist hast du aber ein Collision Model für deine Spieler, Entitys, Level usw. Dies könnte man als Klasse umsetzen und eine Collide-Funktion anbieten. Dazu könnte es dann noch einen CollisionHandler geben, der sich darum kümmert, dass alle Objekte, die kollidieren können, auch getestet werden. Im besten Fall nicht Brutforce, sondern mit Optimierung (also nur die, bei denen es Sinn macht und die auch nah zueinander sind).

Ist aber nur eine Möglichkeit das ganze zu realisieren.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

24.07.2013, 17:34

Ich habe jeder Klasse speziell ein Kollisionsverhalten implementiert. Je nach Spiel, ist eine generische Lösung einfach overkill oder gar nicht so einfach umzusetzen. Wenn du vor allem weißt, wer mit wem kollidieren kann, rate ich dir zu speziellen Collide-Methoden, z.B. Kollidiert der Spieler mit dem Level:

C#-Quelltext

1
2
3
4
if (_level.CollidesWith(player))
{
    //tue irgendwas
}


Das sieht auf dem ersten Blick ziemlich gefrickelt aus aber glaub mir: "Generische Superlösungen" sind in der Hinsicht meiner Erfahrung nach nicht so einfach.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

24.07.2013, 17:35

Wir müssen hier unterscheiden zwischen einer Kollision und einem Collider.
Hier wurde nach Kollisionen gefragt. Dazu würde ich sagen: Eine Kollision ist etwas sehr Temporäres, normalerweise existiert sie nur kurz.
Eigentlich musst du die Kollisionen nirgendwo permanent speichern. Du generierst sie (indem du für Paare von Collidern, die nah beieinander sind, geometrische Schnitttests durchführst) und arbeitest sie direkt danach ab (Reaktion auf die Kollision).

Werbeanzeige