object dengan gambar
Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 14 dari 36.
Musuh adalah gambar yang bergerak di atas Rect, dan kode awal mengelola tiga Rect serta tiga blit secara manual. Sebuah class dapat menyimpan gambar dan Rect secara bersamaan:
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)Gambar diteruskan sebagai argumen, bukan dimuat di __init__. Muat setiap file sekali di bagian atas, lalu berikan Surface yang sama kepada setiap musuh yang memakainya: sepuluh musuh merah memakai satu gambar merah yang sama. Namun, setiap musuh memiliki Rect sendiri, jadi masing-masing bergerak sendiri.
Menggerakkan musuh berarti menggerakkan Rect-nya, dan menggambarnya berarti melakukan blit gambarnya pada Rect: dua atribut yang dimiliki setiap object game di bagian ini.
Tantangan
Sedang- Tulis class
Enemydengan__init__(self, image, x, y),update(self), dandraw(self, screen), seperti di atas: Rect berpusat di (x, y), bergerak turun 2 piksel setiap frame, lalu kembali ke atas tepi atas setelah berada di bawah jendela. - Buat
enemies, sebuah list berisi tiga enemy: yang merah berpusat di (160, 100), yang hijau di (320, 100), dan yang kuning di (480, 100). - Perbarui dan gambar setiap enemy dalam list; hapus ketiga Rect.
Coba sendiri
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()
Semua pelajaran di Sprite dan Gambar
2Putar, Cerminkan, Ubah Skala
Putar Mengelilingi Titik TengahHadap ke Arah TerbangmuUbah Skala GambarPutar dari Gambar Asli3class untuk object game
class pertamamumethodself adalah objectlist berisi objectobject dengan gambarsubclass6Animasi dari Sprite Sheet
Memotong Sprite SheetPenghitung FrameMenganimasikan dengan WaktuLedakan Sekali JalanLatihan sendiri: Playground Pygame