background image

• update(dt)

• draw()

Η σκηνή (Scene) διατηρούσε μια συλλογή από αντικείμενα τύπου Entity, τα οποία ενημερώνο-

νταν και αποδίδονταν διαδοχικά.

Αν και λειτουργικά είναι επαρκής, η προσέγγιση αυτή παρουσιάζει σημαντικούς περιορι-

σμούς:

• Δυσκολία συνδυασμού χαρακτηριστικών (π.χ. sprite με φυσική και ήχο).

• Ανάγκη δημιουργίας νέων κλάσεων για κάθε πιθανό συνδυασμό λειτουργιών.

• Περιορισμένη ευελιξία σύνθεσης συμπεριφοράς.

• Αυξημένη σύζευξη δεδομένων και λογικής και πολυπλοκότητας.

Οι περιορισμοί αυτοί οδήγησαν στην αναζήτηση πιο ευέλικτου αρχιτεκτονικού μοντέλου.

4.5.3

Μετάβαση στην αρχιτεκτονική Entity–Component–System (ECS)

Entity

Για την αντιμετώπιση των παραπάνω περιορισμών, υιοθετήθηκε το πρότυπο Entity–

Component–System (ECS), το οποίο διαχωρίζει αυστηρά:

• Entity, η ταυτότητα.

• Component, τα δεδομένα.

• System, η λογκή επεξεργασίας των δεδομένων.

Η πίο απλή μορφή που μπορεί να πάρει η κλάση entity είναι η παρακάτω.

struct Entity {

uint32_t id;

Components

Τα components αποτελούν καθαρά δομές δεδομένων. Ενδεικτικά παραδείγματα components

που υλοποιήθηκαν στο πλαίσιο της παρούσας εργασίας είναι τα εξής:

• TransformComponent

• SpriteRendererComponent

• LightComponent

• VelocityComponent

33