Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang
  1. Tulis class Enemy dengan __init__(self, image, x, y), update(self), dan draw(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.
  2. Buat enemies, sebuah list berisi tiga enemy: yang merah berpusat di (160, 100), yang hijau di (320, 100), dan yang kuning di (480, 100).
  3. 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

Latihan sendiri: Playground Pygame