Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

GAME PROGRAMMING PATTERNS – FLYWEIGHT & OBSERVER Robert Nystrom Softwaretechnologie II Teil 2 Anike Schulz.

Ähnliche Präsentationen


Präsentation zum Thema: "GAME PROGRAMMING PATTERNS – FLYWEIGHT & OBSERVER Robert Nystrom Softwaretechnologie II Teil 2 Anike Schulz."—  Präsentation transkript:

1 GAME PROGRAMMING PATTERNS – FLYWEIGHT & OBSERVER Robert Nystrom Softwaretechnologie II Teil 2 Anike Schulz

2 FLYWEIGHT class Tree { private: Mesh mesh_; Texture bark_; Texture leaves_; Vector position_; double height_; double thickness_; Color barkTint_; Color leafTint_; };

3 FLYWEIGHT

4 class TreeModel { private: Mesh mesh_; Texture bark_; Texture leaves_; }; class Tree { private: TreeModel* model_; Vector position_; double height_; double thickness_; Color barkTint_; Color leafTint_; }; Extrinsic state Intrinsic state

5 FLYWEIGHT Wird benötigt wenn viele Objekte „leichter“ gemacht werden müssen Fliesenhaftes Terrain: enum Terrain { TERRAIN_GRASS, TERRAIN_HILL, TERRAIN_RIVER // Other terrains... }; class World { private: Terrain tiles_[WIDTH][HEIGHT]; };

6 FLYWEIGHT

7

8 Anstatt ein Netz aus enums besser ein Netz aus Zeigern: class World { private: Terrain* tiles_[WIDTH][HEIGHT]; // Other stuff... };

9 FLYWEIGHT Direkt in der Welt speichern:

10 FLYWEIGHT

11 const Terrain& World::getTile(int x, int y) const { return *tiles_[x][y]; } int cost = world.getTile(2, 3).getMovementCost();

12 FLYWEIGHT Vergleich von Zeiger zum enum: „indirect lookup“ Durch längeren Weg kann es cache misses geben Wichtig: vorher profilieren! Ist Flyweight das Richtige?

13 OBSERVER Model-View-Controller:

14 OBSERVER Spielbeispiel: Achievement System Ziel: Achievements durch unterschiedliche Sachen ausführen lassen aber zentral an einer Stelle im Code haben Observer: Teilt mit, dass etwas passiert, es ist aber egal an wen die Nachricht geht

15 OBSERVER

16 Der Observer:

17 OBSERVER Das Subject: Das Subject hat eine Liste mit Observern, nicht nur einen einzelnen

18 OBSERVER Aufgabe des Subjects: Benachrichtigungen senden

19 OBSERVER

20 Häufige Kritiken am Observer: Er ist zu langsam Er ist zu schnell Es gibt zuviele dynamische Zuteilungen => dafür gibt es Lösungen

21 OBSERVER

22 Benachrichtigungen senden:

23 OBSERVER Jetzt können Observer aber nur ein Subject haben Lösung: selbstständige Knotenobjekte die auf die Observer zeigen

24 OBSERVER Zwei Probleme: 1. Was passiert wenn man einen Observer/ ein Subject löscht? Lösung: Selbstverwaltende Observer Lösung: Subject schickt Benachrichtigung vor dem Löschen 2. Wie finde ich einfach Fehler im Code? Lösung: Observer sind unpassend für das Spiel

25 OBSERVER Observer heute: Nicht gut angesehen, starr und schwer, zu viele Klassen Moderne Anwendung: Referenz zu Methode/ Funktion Die Zukunft der Observer: Viele Versuche das immer gleiche Verhalten der Observer zu verbessern

26 VIELEN DANK FÜR EURE AUFMERKSAMKEIT!


Herunterladen ppt "GAME PROGRAMMING PATTERNS – FLYWEIGHT & OBSERVER Robert Nystrom Softwaretechnologie II Teil 2 Anike Schulz."

Ähnliche Präsentationen


Google-Anzeigen