Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Σηζήτηση Απόδοσης Παιχνιδομηχανής Και Το Μέλλον Της Python.

Σηζήτηση Απόδοσης Παιχνιδομηχανής Και Το Μέλλον Της Python. 8 Χρόνια 1 Μήνας πριν #3882

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Καλησπέρα.

Έχω αρχίση ένα απίστευτο project στο οποίο προσπαθώ να πάρω το pygame και να δημιουργήσω μια αρκετά καλή game engine που θα έχει πάρα πολές καλές λειτουργίες έτοιμες έτσι ώστε ο προγραμματιστής να
ασχολείται μόνο με την λογική του παιχνιδιού του και να μην μπαίνει σε "βαθές" σκέψεις.

Το ποιο μεγάλο εμπόδιο που αντιμετώπισα μέχρι τώρα ήταν το πως να φτιάξω έναν αλγόριθμο ο οποίος να διαχειρήζετε τα game objects έτσι ώστε να μπορώ να έχω όσο το δυνατόν περισσότερα game objects φορτωμένα στην μνήμη χωρίς να πέφτουν τα FPS (απόδοση του παιχνιδιού).

Τα game objects χωρίζονται σε σκηνές παιχνιδιού (scenes) όπου η κάθε σκηνή έχει έναν αριθμό από αντικείμενα. Κάθε φορά που φορτώνεται μία σκηνή στο παιχνίδι, τα νέα αντικείμενα φορτώνονται στην μνήμη, ενώ τα παλιά διαγράφονται. Με αυτόν τον τρόπο μπορείς να ελέγχεις πόση μνήμη χρησιμοποιεί το παιχνίδι σου.

Επομένως προσπάθησα να σκεφτώ έναν αλγόριθμό ο οποίος να με επιτρέπει να έχω ανά σκηνή έναν μέγιστο αριθμό αντικειμένων χωρίς να πέφτουν τα fps κάτω από 60.

Την πρώτη φορά που το δοκίμασα, με 50 αντικείμενα τα fps έπεφταν στα 20 :P

Τελικά εχτές καθώς έτρωγα σκέφτηκα κάτι πολύ καλό.

Πλέον μπορώ να έχω μέχρι και 1000 αντικείμενα ανά σκηνή χωρίς να πέφτουν τα fps κάτω απο 60 σε έναν μoνό πυρήνα στα 3 Ghz (Επίτηδες δεν χρησιμοποιώ άλλους πυρήνες γιατί θέλω τα παιχνίδια μου να τρέχουν και σε μηχανήματα με 1 πυρήνα).
Επίσης η μέγιστη μνήμη που χρησιμοποιεί συνολικά το παιχνίδι (χωρίς επιπλέον κώδικες) είναι
70 mb (περίπου).

Πιστεύω για πρώτη φορά που φτιάχνω κάτι τέτοιο, έχει αρκετά καλή απόδοση. Για 2D games πιστεύω είναι αρκετό να έχεις 1000 αντικείμενα / σκηνή.

Παρακάτω θα σας δείξω πως φτιάχνεις ένα game όπου απλά κινείς μια εικόνα για να δείτε πως περίπου δουλεύει η μηχανή μου:

Main.py
import pygame2D
from logic import Logic
 
#Δημιουργεί τον πυρίνα της μηχανής.
core   = pygame2D.Core(600, 600)
 
#Δημιουργεί μια σκηνή παιχνιδιού.
scene  = pygame2D.Scene("Level 1")
 
#Δημιουργεί ένα game object.
player = pygame2D.Sprite(image = core.pygame.image.load("player.png") )
 
player.setBrain( Logic(core) ) #Του προσθέτει ένα python script.
player.setStatic(False)        #Το μαρκάρει ως μη στατικό αντικείμενο.
 
 
scene.add(player) #Προσθέτει αντικείμενα στην σκηνή.
 
core.loadScene(scene) #Φορτώνει την σκηνή στον πυρίνα.
 
core.start() #Τρέχει τον πυρίνα (το παιχνίδι).


logic.py
import pygame2D
 
class Logic(pygame2D.Brain):
 
    speed = 5
 
    #Καλείται αυτόματα κάθε φορά που φορτώνεται μια νέα σκηνή.	
    def start(self):
        pass
 
 
    #Καλείται αυτόματα κάθε frame per second.	
    def update(self):
 
        #Stop the game.
        if self.core.input.quit:
            self.core.stop()
 
        #Move the sprite.
        self.sprite.move(
            self.speed,
            self.core.input.up,
            self.core.input.down,
            self.core.input.left,
            self.core.input.right
            )
 
 
 
    #Καλείται αυτόματα όταν το συγκεκριμένο αντικείμενο έρθει σε επαφή με ένα άλλο.	
    def onCollisionEnter(self, col):
        pass
 
 
    #Καλείται αυτόματα όταν το συγκεκριμένο αντικείμενο σταματήσει να είναι σε επαφή με ένα άλλο.
    def onCollisionExit(self, col):
        pass


Γενικά μέχρι τώρα κάνει αρκετά χρήσημα πράματα, αλλά ακόμα έχω πολύ δουλειά.
Αυτά που κάνει μέχρι στιγμής είναι:

1) Διαχειρίζεται τα game objects.
2) Διαχειρίζεται τα collision detections.
3) Μπορείς να γράφεις ξεχωριστά scriptakia για το κάθε game object (τα οποία τα ονομάζω brains).
4) Σου δίνει καλύτερη οργάνωση στον κωδικά σου.


Τη θα φτιάξω στο μέλλον:

1) Έτοιμη λειτουργικότητα για να δίνει το εφέ κίνησης της cameras ώστε να μπορείς να φτιάχνεις πολύ
εύκολα παιχνίδια rpg.

2) Έτοιμο animation system έτσι ώστε να φτιάχνεις γρήγορα animations.

3) GUI Interface έτσι ώστε να φτιάχνεις τις σκηνές παιχνιδιού πολύ ποιο εύκολα χωρίς κώδικα!!!


Και στο ποιο μακρινό μέλλον:

Να μπορείς να κάνεις και 3D Games :P

Βέβαια το project δεν είναι εύκολο. Αποφάσισα να το κάνω γιατί ακόμα κανείς δεν έχει κάνει ένα τέτοιο
εργαλείο αποκλειστικά για python και πιστεύω θα είναι κάτι το πολύ ενδιαφέρον. Και βέβαια πραγματικά το απολαμβάνω που το κάνω αυτό.

Εμπνεύστικα από τον τρόπο με τον οποίο λειτουργεί η Unity 3D

Ίσως κάποια μέρα να γίνει αρκετά πετυχημένο.

Ακούω Γνώμες!
Τελευταία διόρθωση: 8 Χρόνια 1 Μήνας πριν από babaliaris1.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.509 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου