Menu
CoddyTech

Class Sprite

Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 16 dari 36.

Setiap object game sejauh ini memiliki gambar, Rect, update, dan cara untuk menggambarnya. pygame memiliki class yang dibuat khusus untuk itu: pygame.sprite.Sprite. Object game-mu menjadi subclass darinya:

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

Ada tiga aturan. Panggil super().__init__() terlebih dahulu: ini menyiapkan hal-hal yang dibutuhkan class Sprite di dalamnya. Namai gambarnya self.image dan posisinya self.rect, persis seperti itu: kode pygame sendiri membaca kedua nama tersebut. Letakkan aturan untuk setiap frame di dalam update.

Gambar kapal dimuat sekali di bagian atas sebagai ship_image, lalu class menggunakannya. Untuk saat ini, gambar sprite dengan blit: screen.blit(player.image, player.rect). Pelajaran berikutnya akan membuat pygame menggambarnya.

challenge icon

Tantangan

Sedang
  1. Tulis class Player(pygame.sprite.Sprite) seperti di atas: self.image adalah ship_image, self.rect memiliki titik tengah bawah di (320, 470).
  2. update-nya menggerakkan Rect 6 piksel ke kiri atau kanan dengan tombol panah dan membatasinya agar tetap di dalam jendela: pindahkan baris-baris kode awal ke dalamnya.
  3. Buat player = Player(), panggil player.update() setiap frame, lalu blit player.image pada player.rect.

Coba sendiri

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()

Semua pelajaran di Sprite dan Gambar

Latihan sendiri: Playground Pygame