Menu
CoddyTech

Sprite Sınıfı

Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 16 / 36.

Şimdiye kadarki her oyun nesnesinin bir görseli, bir Rect'i, bir update yöntemi ve çizilme yolu vardı. pygame tam olarak bunun için tasarlanmış bir sınıfa sahip: pygame.sprite.Sprite. Oyun nesnelerin bu sınıfın alt sınıfları hâline gelir:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = ship_image
        self.rect = self.image.get_rect(midbottom=(320, 470))

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= 6

Üç kural. Önce super().__init__() çağrısını yap: Sprite sınıfının içinde ihtiyaç duyduğu şeyleri hazırlar. Görseli tam olarak self.image, konumu da self.rect olarak adlandır: pygame'in kendi kodu bu iki adı okur. Her kareye ait kuralları update içine koy.

Gemi görseli en üstte bir kez ship_image olarak yüklenir ve sınıf bunu kullanır. Şimdilik, sprite'ı bir blit ile çiz: screen.blit(player.image, player.rect). Sonraki derste pygame'in onu çizmesini sağlayacaksın.

challenge icon

Görev

Orta
  1. Yukarıdaki gibi class Player(pygame.sprite.Sprite) yaz: self.image, ship_image olur; self.rect dikdörtgeninin alt orta noktası (320, 470) konumundadır.
  2. update, ok tuşlarıyla Rect'i 6 piksel sola veya sağa hareket ettirir ve pencere sınırları içinde tutar: başlangıç kodundaki satırları bunun içine taşı.
  3. player = Player() oluştur, her karede player.update() çağır ve player.image öğesini player.rect konumunda blit et.

Kendin dene

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Ship")
clock = pygame.time.Clock()

ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship_image.get_rect(midbottom=(320, 470))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        ship_rect.x -= 6
    if keys[pygame.K_RIGHT]:
        ship_rect.x += 6
    ship_rect.clamp_ip(screen.get_rect())

    screen.fill((20, 22, 40))
    screen.blit(ship_image, ship_rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Sprite'lar ve Görseller bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground