Καλησπέρα.
Προσπαθώ να κάνω έναν μηχανισμό ο οποίος ελέγχει αν τα αντικείμενα στο παιχνίδι μου
έρθουν σε επαφή.
Μέχρι τώρα έχω κάνει τα εξής:
Στην κλάση Sprite έφτιαξα μια μέθοδο get_collision(other_sprite) η οποία επιστρέφει
True εάν το self έρθει σε επαφή με το other_sprite.
Στην συνέχεια έφτιαξα τον μηχανισμό ως εξής:
Συγκέντρωσα όλλα τα αντικειμενα Sprites που υπάρχουν στο παιχνίδι σε μια λίστα
και έγραψα το παρακάτω
for obj_1 in objects:
for obj_2 in objects:
if obj_2.get_collision(obj_1):
obj_2.on_collision(obj_1)
Το παραπάνω loop κάνει όλους του πιθανούς συνδιασμούς και αν η get_collision ισχύει σε
κάποια από αυτά τα ζευγάρια τότε η on_collision(collided_obj) καλείτε για το συγκεκριμένο
sprite object και ότι κώδικας υπάρχει μέσα στην on_collision τρέχει.
Ο μηχανισμός μου δουλεύει όπως θέλω αλλά κοστίζει πάρα πολύ!!!
50 sprite objects να υπάρχουν στην σκηνή το παιχνίδι αρχίζει να "λαγκάρει" αν και
50 sprite objects είναι πολύ λίγα.
Και είναι λογικό γιατί όχι μόνο τα δυο for loop έχουν πολυπλοκότητα N^2 , αλλά επίσης
ο κώδικας της get_collision είναι βαρής.
πχ αν έχω 200 sprite objects μέσα στην λίστα τότε τα 2 for loop θα κάνουν 200 x 200
= 40.000 επαναλήψεις που σημένει ότι ο κώδικας της get_collision θα κληθεί
40.000 φορές. Πολύ αργός ο κωδικάς μου.
Μήπως ξέρει κανείς κάποιον καλήτερο τρόπο για να το κάνω αυτό;
Προσπαθώ να το σκεφτώ εδώ και πόσες μέρες και δεν τα καταφέρνω.