Το Pygame παρέχει πολλές ενσωματωμένες λειτουργίες για τον εντοπισμό συγκρούσεων μεταξύ αντικειμένων του παιχνιδιού. Αυτά είναι ανεκτίμητης αξίας, διότι το να προσδιορίσετε ακριβώς πότε και πώς επικαλύπτονται τα κινούμενα αντικείμενα μπορεί να είναι μια περίπλοκη εργασία.
Μάθετε πώς να προσθέτετε βασική φυσική και συγκρούσεις στο παιχνίδι σας χρησιμοποιώντας τη μονάδα pygame.
Οι ενσωματωμένες λειτουργίες ανίχνευσης σύγκρουσης της Pygame
Η πιο βασική ενσωματωμένη λειτουργία ανίχνευσης σύγκρουσης είναι το spritecollide. Λαμβάνει ένα sprite, μια ομάδα sprites και μια boolean τιμή που υποδεικνύει εάν τα sprites πρέπει να "πεθάνουν" (να αφαιρεθούν) όταν συγκρούονται. Αυτή η συνάρτηση επιστρέφει μια λίστα με sprites που έχουν συγκρουστεί. Ακολουθεί ένα παράδειγμα για το πώς να το χρησιμοποιήσετε:
collided_sprites = pygame.sprite.spritecollide (sprite1, sprite_group, Αληθής)
Μια άλλη χρήσιμη συνάρτηση ανίχνευσης σύγκρουσης είναι η groupcollide, η οποία λαμβάνει δύο ομάδες sprites και μια τιμή boolean επίσης. Αυτή η συνάρτηση επιστρέφει ένα λεξικό με τα πλήκτρα που συγκρούστηκαν και ως τιμές τα ξωτικά με τα οποία συγκρούστηκαν. Ακολουθεί ένα παράδειγμα για το πώς να το χρησιμοποιήσετε:
collision_dict = pygame.sprite.groupcollide (group1, group2, Αληθής, Αληθής)
Δημιουργία βασικού παιχνιδιού πλατφόρμας με χρήση της συνάρτησης spritecollide
Για να δημιουργήσετε ένα βασικό παιχνίδι πλατφόρμας χρησιμοποιώντας το Pygame, θα χρειαστεί να δημιουργήσετε ένα sprite παίκτη που μπορεί να ελέγξει ο χρήστης και ένα sprite πλατφόρμας για να σταθεί ο παίκτης. Μπορείτε να χρησιμοποιήσετε τη συνάρτηση spritecollide για να ανιχνεύσετε πότε το sprite του player συγκρούεται με το sprite της πλατφόρμας και να αποτρέψετε την πτώση του player μέσα από την πλατφόρμα.
Να ξεκινήσω, εγκαταστήστε τη μονάδα pygame χρησιμοποιώντας το pip:
pip εγκατάσταση pygame
Μετά από αυτό, δημιουργήστε απλές τάξεις για τον Παίκτη και την Πλατφόρμα, και τα δύο θα πρέπει να κληρονομηθούν από την κλάση Sprite της Pygame. Η κλάση Player θα πρέπει να έχει μια μέθοδο ενημέρωσης για να χειρίζεται τη θέση του παίκτη με βάση την ταχύτητα. Επίσης, θα πρέπει να έχει μια μεταβλητή y_velocity για την εφαρμογή του φαινομένου της βαρύτητας. Η κλάση Platform θα πρέπει να έχει μια μέθοδο __init__ που παίρνει τις συντεταγμένες της πλατφόρμας και δημιουργεί μια επιφάνεια με αυτό το μέγεθος.
Κατηγορία παικτών
Μπορείτε να δημιουργήσετε μια κλάση Player χρησιμοποιώντας το pygame.sprite. Μονάδα Sprite. Αυτή η κλάση θα αρχικοποιήσει τον παίκτη με δεδομένες συντεταγμένες x και y. Στη συνέχεια, η μέθοδος ενημέρωσης θα ενημερώσει τη θέση της συσκευής αναπαραγωγής αυξάνοντας την τιμή y_velocity.
εισαγωγή pygame
τάξηΠαίχτης(pygame.sprite. Ξωτικό):
def__μέσα σε αυτό__(εαυτός, x, y):
super().__init__()
self.image = pygame. Επιφάνεια((32, 32))
self.rect = self.image.get_rect (πάνω αριστερά=(x, y))
αυτο.y_ταχύτητα = 0
defεκσυγχρονίζω(εαυτός):
self.rect.y += αυτο.y_ταχύτητα
Τάξη πλατφόρμας
Η κλάση Πλατφόρμα χρησιμοποιεί επίσης το pygame.sprite. Μονάδα Sprite. Αυτή η κλάση θα αρχικοποιήσει την πλατφόρμα με δεδομένες συντεταγμένες x και y, καθώς και πλάτος και ύψος.
τάξηΠλατφόρμα(pygame.sprite. Ξωτικό):
def__μέσα σε αυτό__(εαυτός, x, y, πλάτος, ύψος):
super().__init__()
self.image = pygame. Επιφάνεια ((πλάτος, ύψος))
self.rect = self.image.get_rect (πάνω αριστερά=(x, y))
The Game Loop
Ο βρόχος παιχνιδιού θα σας επιτρέψει να δημιουργήσετε ένα παράθυρο με μέγεθος 640x480. Στη συνέχεια, θα εκτελέσει έναν βρόχο που θα ελέγχει για τυχόν συμβάντα, όπως μια εντολή τερματισμού. Θα ελέγξει επίσης για τυχόν συγκρούσεις μεταξύ του παίκτη και της πλατφόρμας. Τέλος, θα γεμίσει την οθόνη με ένα λευκό χρώμα, θα σχεδιάσει τη συσκευή αναπαραγωγής και την πλατφόρμα και, στη συνέχεια, θα γυρίσει την οθόνη.
παίκτης = Παίκτης(100, 300)
player_group = pygame.sprite. Ομάδα()
player_group.add (παίκτης)πλατφόρμα = Πλατφόρμα(50, 400, 100, 20)
platform_group = pygame.sprite. Ομάδα()
platform_group.add (πλατφόρμα)# Αρχικοποιήστε το pygame και δημιουργήστε παράθυρο
pygame.init()
οθόνη = pygame.display.set_mode((640, 480))# Κύριος βρόχος παιχνιδιού
τρέξιμο = Αληθήςενώ τρέξιμο:
Για Εκδήλωση σε pygame.event.get():
αν event.type == pygame. ΕΓΚΑΤΑΛΕΙΠΩ:
τρέξιμο = Ψευδής
player_group.update()
collided = pygame.sprite.spritecollide (player, platform_group, Ψευδής)αν συγκρούστηκε:
παίκτης.y_ταχύτητα = 0
screen.fill((255, 255, 255))
player_group.draw (οθόνη)
platform_group.draw (οθόνη)
pygame.display.flip()
pygame.quit()
Παρακάτω είναι η έξοδος:
Εφαρμογή της βαρύτητας και της πηματικής συμπεριφοράς
Για να εφαρμόσετε τη βαρύτητα και τη συμπεριφορά άλματος στο παιχνίδι εξόδου σας, θα χρειαστεί να προσθέσετε μια ταχύτητα y στο sprite του παίκτη σας και να ενημερώσετε τη θέση του y σε κάθε καρέ. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε τη μέθοδο ενημέρωσης μέσα στην κλάση Player και να προσθέσετε το ακόλουθο απόσπασμα κώδικα:
τάξηΠαίχτης(pygame.sprite. Ξωτικό):
def__μέσα σε αυτό__(εαυτός, x, y):
super().__init__()
self.image = pygame. Επιφάνεια((32, 32))
self.rect = self.image.get_rect (πάνω αριστερά=(x, y))
αυτο.y_ταχύτητα = 0
defεκσυγχρονίζω(εαυτός):
self.rect.y += αυτο.y_ταχύτητα
αυτο.y_ταχύτητα += ΒΑΡΥΤΗΤΑ # Εφαρμόστε τη βαρύτητα στην ταχύτητα y
Τώρα κάθε φορά που καλείτε τη μέθοδο ενημέρωσης, θα ενημερώνει τη θέση του παίκτη ανάλογα με την ταχύτητα και τη βαρύτητα του.
Για να κάνετε το άλμα sprite του παίκτη, μπορείτε να συνδέσετε την ενέργεια άλματος σε ένα συγκεκριμένο πλήκτρο ή κουμπί και να ενημερώσετε την ταχύτητα y του παίκτη με μια αρνητική τιμή. Το παρακάτω απόσπασμα κώδικα είναι ένα παράδειγμα του τρόπου μετάβασης όταν ένας παίκτης πατάει το πλήκτρο διαστήματος.
JUMP_VELOCITY = -10
# εντός του βρόχου παιχνιδιού
αν event.type == pygame. KEYDOWN και event.key == pygame. K_SPACE:
player.y_velocity = JUMP_VELOCITY
Σημειώστε ότι θα χρειαστεί να ελέγξετε το event.type για να βεβαιωθείτε ότι το συμβάν είναι συμβάν KEYDOWN πριν ελέγξετε την τιμή του κλειδιού.
Προσθήκη βασικών φυσικών όπως η τριβή και η επιτάχυνση
Για να προσθέσετε βασική φυσική, όπως η τριβή και η επιτάχυνση στο παιχνίδι εξόδου σας, θα χρειαστεί να ενημερώσετε την ταχύτητα x του sprite του παίκτη σας σε κάθε καρέ. Μπορείτε να προσθέσετε x ταχύτητα στην κατηγορία παίκτη και να την ενημερώσετε με τον ίδιο τρόπο όπως η ταχύτητα y. Για να εφαρμόσετε την τριβή, μπορείτε να μειώσετε την ταχύτητα x του sprite του παίκτη κατά ένα μικρό ποσό σε κάθε καρέ. Για παράδειγμα, μπορείτε να προσθέσετε το ακόλουθο απόσπασμα κώδικα μέσα στη μέθοδο ενημέρωσης της κλάσης Player:
ΤΡΙΒΗ = 0.9
τάξηΠαίχτης(pygame.sprite. Ξωτικό):
def__μέσα σε αυτό__(εαυτός, x, y):
super().__init__()
self.image = pygame. Επιφάνεια((32, 32))
self.rect = self.image.get_rect (πάνω αριστερά=(x, y))
αυτο.y_ταχύτητα = 0
αυτο.χ_ταχύτητα = 0
defεκσυγχρονίζω(εαυτός):
self.rect.y += αυτο.y_ταχύτητα
self.rect.x += self.x_velocity
αυτο.y_ταχύτητα += ΒΑΡΥΤΗΤΑ # Εφαρμόστε τη βαρύτητα στην ταχύτητα y
αυτο.χ_ταχύτητα *= ΤΡΙΒΗ # Εφαρμόστε τριβή σε x ταχύτητα
Για να εφαρμόσετε την επιτάχυνση, μπορείτε να ορίσετε μια μεταβλητή, player_movement, για την οριζόντια κίνηση και να ενημερώσετε την ταχύτητα x του sprite παίκτη σύμφωνα με την τιμή player_movement. Μπορείτε να το κάνετε αυτό δεσμεύοντας την κίνηση σε συγκεκριμένα πλήκτρα ή κουμπιά και ενημερώνοντας την ταχύτητα x του προγράμματος αναπαραγωγής στον βρόχο συμβάντος, για παράδειγμα:
ΕΠΙΤΑΧΥΝΣΗ = 0.5
παίκτης_κίνηση = 0
αν event.type == pygame. KEYDOWN:
αν event.key == pygame. K_LEFT:
παίκτης_κίνηση = -1
ελιφ event.key == pygame. K_RIGHT:
παίκτης_κίνηση = 1
ελιφ event.type == pygame. KEYUP:
αν συμβάν.κλειδί σε (pygame. K_LEFT, pygame. K_RIGHT):
παίκτης_κίνηση = 0
player.x_velocity += player_movement * ΕΠΙΤΑΧΥΝΣΗ
Χρησιμοποιώντας αυτές τις τεχνικές, μπορείτε να δημιουργήσετε ένα απλό αλλά διασκεδαστικό παιχνίδι πλατφόρμας χρησιμοποιώντας τις ενσωματωμένες λειτουργίες ανίχνευσης σύγκρουσης και τη βασική φυσική της Pygame. Με λίγη δημιουργικότητα και πειραματισμό, μπορείτε να χρησιμοποιήσετε αυτές τις τεχνικές για να δημιουργήσετε μια ποικιλία διαφορετικών παιχνιδιών και μηχανικών παιχνιδιών.
Μπορείτε να βρείτε τον πλήρη κωδικό στο Αποθετήριο GitHub.
Παρακάτω είναι η έξοδος:
Βελτιώστε την αφοσίωση των χρηστών με συγκρούσεις
Πολλά παιχνίδια απαιτούν κάποια μορφή ανίχνευσης σύγκρουσης. Μπορείτε να χρησιμοποιήσετε τις συγκρούσεις για να δημιουργήσετε ένα ευρύ φάσμα μηχανικών παιχνιδιών, από απλές πλατφόρμες έως πολύπλοκες προσομοιώσεις βασισμένες στη φυσική.
Η εφαρμογή βασικών φυσικών όπως η βαρύτητα, η τριβή και η επιτάχυνση μπορεί επίσης να βελτιώσει σημαντικά την αφοσίωση των χρηστών, προσθέτοντας ρεαλισμό και αίσθηση βάρους στα αντικείμενα του παιχνιδιού.