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

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

1

24.01.2012, 17:24

Frage, zur besseren Umsetzung

Hi alle zusammen!

Ich hab mal ne Frage zu einer Umsetzungf einer Situation.
Die Situation kennt bestimmt jeder:

Um nur ein beispiel zu nennen, bei Mario Kart gibt es ja auf manchen Strecken solche "lebende" Pilze,
bei denen man sich dreht, wenn man durch sie durch fährt.

So, wenn man jetzt an die Struktur von David Scherfgen anknüpft, also, dass jede Struktur eine Init(), Exit(), Load(), render(), Move, usw.. hat,
stellt sich mir eine Frage.
Dies alles macht man ja, korrigiert mich, wenn ich falsch liege, um die Klasse unabhängig von anderen Klassen zu machen, d.h. wenn man nur einen pilz haben will,
erstellt man nur eine Struktur und wenn man 50 haben will, erstellt man 50 und das ist dem Hauptprogramm eigentlich komplett schnuppe, ob einer oder 50!
Das ist ja auch die Objektorientiertheit.

Was jetzt meine eigentliche Frage ist:
Irgendwann im Spiel muss ja auch mal getrestet werden, ob ein Spielermit einem pilz koolidiert;
würdet ihr das jetzt in die Move() der Pilz-Strukture schreiben, um die Objektorientiertheit und die Unabhänigkeit zu bewahren, wozu man aber alle Spieler-Strukturen, bzw. nur die koorinaten jeder Move() übergebn müsste ODER würdet ihr diese in die Move() der Game-Struktur schreiben, so halt nicht mehr die Unabhängigkeit beibehalten ?

Lange Rede.... :D .....langer Sinn!
Hoffe ihr könnt mir eine Antwort geben, vorallem in Bezug auf die Performance!

Danke, schon mal!!
ProAmateur
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

24.01.2012, 17:37

Kollision erfordert das Wissen über alle zu testenden Objekte. Der Pilz allein kann dieses Wissen nicht haben, der kann vielleicht eine Methode haben in der er checked ob er mit einem bestimmten Objekt kollidiert, aber die Logik was wann wie getestet wird gehört imo ins Game.

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

3

24.01.2012, 18:04

ja ok das kann ich nachvollziehen, aber mich würde halt jetzt stören, dass der Pilz nicht mehr unabhänig ist.
Außerdem kann ich mir vorstellen, dass bei einem großen Projekt diese Test-Funktion sehr groß und unübersichtlich würde.
Was sagst du dazu?
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

24.01.2012, 18:07

Wieso ist der Pilz dann nichtmehr unabhängig? Gerade so bleibt der Pilz doch unabhängig, ansonsten wäre der Pilz abhängig vom Rest der Welt, da er den Rest der Welt kennen müsste um die Kollisionsprüfung machen zu können!?
Ich würde sagen die Funktion wird gerade dann groß und unübersichtlich wenn der Pilz die Kollision mit allem was es gibt regeln müsste!?

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

5

25.01.2012, 13:24

Ok aber mal angenommen man macht das in der Move() sollte man dann als Zeiger oder Referenz übergeben oder die Spieler Strukturen Global machen? Oder gibts noch ne Möglichkeit?
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

25.01.2012, 13:30

Ich würd ne Referenz übergeben...

7

25.01.2012, 16:53

Ooooder:
Jedesmal wenn der Spieler fährt (sich bewegt) fragt er die GameKlasse, ob es eine Kollision gibt. Die stellt dann fest, dass der Spieler mit dem Pilz kollidiert und kann eine Methode des Pilzes aufrufen um ihn darüber zu informieren. Der Pilz bekommt dann z.B: eine Referenz auf den Spieler und kann dessen Werte manipulieren.
Aber ja: So ganz trivial ist das Zusammenspiel mehrerer eigentlich voneinander unabhängigen Objekten nicht. Man muss das halt am besten vorher einmal auf dem Papier durchgehen, und von verschiedenen Möglichkeiten die Vor- und Nachteile überleben.
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

25.01.2012, 17:02

Jap, also wird der Spieler eine Referenz auf die Gameklasse brauchen ;)

FSA

Community-Fossil

  • Private Nachricht senden

9

26.01.2012, 15:38

Da habe ich auch mal eine kleine Frage. Ich schreibe gerade Kapselungen für die Physik in meiner Engine. Sollte ich dann eine eigene Klasse machen, oder kann ich es einfach in ein Namespace setzen? Ich habe es erstmal in ein Namepsace gesetzt, weil ich nicht immer Lust habe, eine Instanz zu erstellen :P
Also so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#pragma once

namespace PhysicUtils
{
    // Variablen

    // Funktionen
    NewtonBody* GetInteractFocusObject(Vector3 CamPos, Vector3 CamDir, Map* MapHandler);
};

Und die CPP Datei:

C-/C++-Quelltext

1
2
3
4
5
6
NewtonBody* PhysicUtils::GetInteractFocusObject(Vector3 CamPos, Vector3 CamDir, Map* MapHandler)
{
    fParam = 1.0f;
    NewtonWorldRayCast(MapHandler->GetPhysicWorld(), CamPos, CamPos + CamDir*100, RayCastFilter2, NULL, RayCastPrefilter);
        return NBody;
}

EDIT ups da ist wohl etwas Code verloren gegangen ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (26.01.2012, 16:09)


10

26.01.2012, 17:10

Es kommt darauf an ...
Wenn individuelle Eigenschaften benötigt werden muss es eine Klasse sein.
Andernfalls ist ein Namespace die richtige Wahl. Siehe auch hier.

Gib mal mehr Info.

Werbeanzeige