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

1

20.05.2013, 23:27

Farseer in ein größeres Projekt einbauen?

Ich bin mir nicht sicher wie ich Farseer am besten in ein größeres Projekt mit vielen Klassen einbauen soll.
Ich dachte mir das so:
In der Oberklasse(Map) wo auch von allen anderen Unterklassen(Gegner,Spielfigur,etc.) eine Instanz erstellt wird und die Klassen auch geupdatet und gezeichnet werden, möchte ich die Farseer-World updaten und zeichnen. Wenn ich jetzt in dieser Oberklasse eine Instanz von World erstelle, muss ich den anderen Klassen dann die World mitgeben? Oder wie sollte ich vorgehen damit ich die World auch in den Unterklassen benutzen kann(z.B. um die Gegner-Rectangles im jeweiligen Konstruktor zu erstellen)?
Beispiel:
Oberklasse(Map):

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
World world;
Player spielfigur;
Enemy gegner;
public void Load()
        {
            if (world == null)
            {
                world = new World(new Vector2(0, 2));
            }
            else
            {
                world.Clear();
            }
spielfigur = new Player(world);
gegner = new Enemy(world);

Kann man das so machen?

2

21.05.2013, 00:27

Naja, vermutlich wirst du nur genau eine Farseer-World haben wollen. Dann macht es natürlich total Sinn, diese zentral zu verwalten. Jeder der darauf zugreifen muss, braucht dann entweder eine direkte oder indirekte Referenz darauf (also Beispielsweise einen Pointer auf das World Objekt, oder aber: 'Ich kenne meine Map und komme darüber auch an die Farseer-World).
Letztendlich gibt es nicht DIE Lösung, und es hängt natürlich auch sehr viel von der restlichen Struktur ab. So ein Entwurf ist natürlich immer auch Erfahrungssache, also probiere einfache irgendetwas aus. Wenn es sich umständlich anfühlt, besteht die Hoffnung, dass man es eleganter lösen kann.
Lieber dumm fragen, als dumm bleiben!

3

21.05.2013, 01:05

Sollte man zuerst immer den world.Step machen bevor man die Unterklassen updatet? In den Unterklassen befinden sich die Farseer-Bodies.

C#-Quelltext

1
2
3
4
5
6
7
8
public void Update(GameTime gameTime)
        {
            float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
            world.Step(Math.Min(elapsed, (1f / 60f)));
            spielfigur(gameTime);
            gegner(gameTime);
         ...
        }

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

21.05.2013, 01:24

Das sollte relativ egal sein. Stell dir vor du hast zwei Funktionen. "UpdateA" und "UpdateB". Die sollen nacheinander im Spiel aufgerufen werden.

Quellcode

1
2
UpdateA();
UpdateB();

oder

Quellcode

1
2
UpdateB();
UpdateA();


Nun das ganze ist ja normal in einer Schleife verpackt, also werden in beiden Fällen die Funktionen abwechselnd voneinander aufgerufen. Heißt eigentlich ist es egal. In seltenen Fällen spielt es dann natürlich schon eine Rolle. Zum Beispiel könnte UpdateA den Zustand von einem Objekt neu berechnen, während UpdateB den Zustand wieder zurück setzt. So würde im ersten Fall der Zustand berechnet, dann zurück gesetzt und wäre danach nicht mehr verfügbar. Im zweiten Fall würde wie gewünscht erst der Zustand zurück gesetzt und dann neu berechnet. In deinem Fall würde ich mich einfach an die Doku und die Beispiele halten. Intuitiv würde ich die Welt updaten und dann den Rest. Sollte sich durch ausprobieren aber schnell testen lassen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

21.05.2013, 06:31

Das sollte relativ egal sein.
Finde ich nicht. Spiel-Objekte müssen anhand ihrer Physik gezeichnet werden. Also sollte man wohl zuerst die Physik abhandeln.
Wahlweise macht auch ein dreistufiges System Sinn:
1) Eingaben verarbeiten
2) Physik berechnen
3) Spiel-Objekte aktualisieren
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (21.05.2013, 06:42)


Werbeanzeige