Pygame Sprite Kullanımı

Ekranda hareket eden her nesne için sprite tanımını koyabiliriz. Sprite hareket ettirilebilir, başka spritelar ile etkileşim sağlanabilir. Araba yarışında kullandığımız araba nesnesi bir sprite örneğidir. Sprite üzerinde değişiklikler(konum vb.) oyun döngüsü esnasında update, draw fonksiyonları ile sağlanır. Çok fazla sprite olması, kontrolü zorlaştıracaktır, buna çözüm olarak sprite.Group kullanılır. Bu yöntem tüm spriteları bir araya toplayacaktır ve aynı anda update ve draw işlemleri gerçekleşecektir.
sprites_group = pygame.sprite.Group()
Döngü dışında grup değişkeni tanımlandı. Döngü içerisinde aşağıdaki kod yazılır.
    # update        
    sprites_group.update()

    # draw
    screen.fill(green)
    sprites_group.draw(screen)
Sıra geldi bir tane sprite oluşturmaya. Spritelar aslında birer nesnedir. Nesneleri tanımlamak içinse class kullanırız. Tanımlanan sprite sınıfı araba üzerine olsun.
class Car(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((40,70))
        self.image.fill(black)
        self.rect = self.image.get_rect()
        self.rect.topleft(10,30)
Sınıf tanımlarken parametre kısmındaki pygame.sprite.Sprite Pygame'de önceden tanımlanmış Sprite sınıfını temel alıyoruz. Sonrasında __init__() kurucu fonksiyonu yazılır. Bu fonksiyon sınıftan bir nesne üretildiğinde o nesnenin hangi özelliklere ve nasıl çalışacağını belirlemede kullanılır. Kurucu fonksiyonu yazarken ilk satırın pygame.sprite.Sprite.__init__(self) olarak bildirmek zorundayız. Sprite sınıflarını başlatma metodudur. image değişkeni sprite görümü ayarlamadan kullanılır. Yukarıda şimdilik nesneye ait width, height değer argümanları girildi. image.fill ile nesneye ait renk ayarlandı. Nesneye konumlandırabilme özelliği get_rect() yöntemi ile sağlandı. rect.topleft veya rect.center metdotları ile sprite nesnesi için spawn noktası belirleyebiliriz. Sonrasında ise oluşturduğumuz sprite sınıfını, sprite grubuna ekliyoruz.
sprites_group = pygame.sprite.Group()
car = Car()
sprites_group.add(car)
Sonrasında kodu çalıştıralım sol köşede sprite nesnemiz gözükecektir.
import pygame
import sys

pygame.init()

size = width, height = 640, 480
speed = [1,1]
green = (0,255,0)
black = (0,0,0)

screen = pygame.display.set_mode(size)


class Car(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((40,70))
        self.image.fill(black)
        self.rect = self.image.get_rect()
        self.rect.topleft = (10,30)
    
sprites_group = pygame.sprite.Group()
car = Car()
sprites_group.add(car)

run = True

while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            
    # update        
    sprites_group.update()

    # draw
    screen.fill(green)
    sprites_group.draw(screen)

    pygame.display.flip()

pygame.quit()

Hiç yorum yok:

Yorum Gönderme