Görselli Nesneler
Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 14 / 36.
Düşmanlar Rect'ler üzerinde hareket eden görsellerdir ve başlangıç kodu üç Rect'i ve üç blit işlemini elle tutar. Bir sınıf, görseli ve Rect'ini birlikte tutabilir:
class Enemy:
def __init__(self, image, x, y):
self.image = image
self.rect = image.get_rect(center=(x, y))
self.speed = 2
def update(self):
self.rect.y += self.speed
if self.rect.top > 480:
self.rect.bottom = 0
def draw(self, screen):
screen.blit(self.image, self.rect)Görsel, __init__ içinde yüklenmek yerine buraya aktarılır. Her dosyayı en başta bir kez yükle ve aynı Surface'i onu kullanan tüm düşmanlara ver: on kırmızı düşman aynı kırmızı görseli paylaşır. Ancak her düşman kendine ait bir Rect alır; böylece her biri kendi başına hareket eder.
Düşmanı hareket ettirmek, Rect'ini hareket ettirmektir; onu çizmek ise görselini Rect konumunda blit etmektir: Bu bölümdeki her oyun nesnesinin sahip olduğu iki öznitelik bunlardır.
Görev
Orta- Yukarıdaki gibi
Enemysınıfını__init__(self, image, x, y),update(self)vedraw(self, screen)ile yaz: (x, y) noktasında ortalanmış Rect, kare başına 2 piksel aşağı hareket etsin ve pencerenin altına geçtiğinde üst kenarın üzerine geri gelsin. - Üç öğeden oluşan bir
enemieslistesi oluştur: kırmızı olan (160, 100) noktasında, yeşil olan (320, 100) noktasında, sarı olan (480, 100) noktasında ortalansın. - Listedeki her düşmanı güncelle ve çiz; üç Rect'i kaldır.
Kendin dene
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()
red_rect = red.get_rect(center=(160, 100))
green_rect = green.get_rect(center=(320, 100))
yellow_rect = yellow.get_rect(center=(480, 100))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
for rect in (red_rect, green_rect, yellow_rect):
rect.y += 2
if rect.top > 480:
rect.bottom = 0
screen.fill((20, 22, 40))
screen.blit(red, red_rect)
screen.blit(green, green_rect)
screen.blit(yellow, yellow_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Sprite'lar ve Görseller bölümündeki tüm dersler
4Sprite'lar ve Gruplar
Sprite SınıfıGruplarkill() ile Kaldırmaspritecollide ile YakalamaGruba Karşı Grup2Döndür, Yansıt, Ölçekle
Merkez Etrafında DöndürUçtuğun Yöne DönBir Görseli ÖlçekleOrijinalinden Döndür5Piksel Hassasiyetinde Çarpışmalar
Dikdörtgenler Haksız HissettiriyorMaskelerPiksel Hassasiyetinde Sprite'larDaire Hitbox'ları3Oyun Nesneleri için Sınıflar
İlk SınıfınızMetotlarSelf Nesnenin KendisidirNesneler ListesiGörselli NesnelerBir Alt Sınıf6Sprite Sheet'lerden Animasyon
Bir Sprite Sheet'i KesmekBir Kare SayacıZamanla AnimasyonTek Seferlik Bir PatlamaKendi başına pratik yap: Pygame playground