Mask
Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 22 dari 36.
Mask adalah kisi berisi ya dan tidak, satu nilai untuk setiap piksel: ya jika gambar terlihat padat, tidak jika gambar tembus pandang. pygame membuatnya dari gambar apa pun yang memiliki alpha:
ship_mask = pygame.mask.from_surface(ship)
ball_mask = pygame.mask.from_surface(ball)Buat mask sekali saja, sebelum perulangan, seperti gambar asalnya.
Dua mask bertumpang tindih saat piksel padat dari satu mask berada di atas piksel padat dari mask lainnya. Mask tidak memiliki posisi, jadi kamu perlu menentukan letak mask kedua relatif terhadap mask pertama: offset, yaitu posisi kiri atas mask kedua dikurangi posisi kiri atas mask pertama.
offset = (ball_rect.x - ship_rect.x, ball_rect.y - ship_rect.y)
if ship_mask.overlap(ball_mask, offset):overlap mengembalikan titik pertama tempat keduanya bersentuhan, atau None jika keduanya tidak bersentuhan, sehingga bisa digunakan sebagai pengujian dalam if. Jika offset-nya terbalik, bola akan diuji seolah-olah berada di sisi lain kapal.
Sekarang garis tepi merah membutuhkan kontak nyata: sudut-sudutnya saja tetap berwarna abu-abu.
Tantangan
Sedang- Sebelum perulangan, buat
ship_maskdanball_maskdenganpygame.mask.from_surface. - Warnai garis tepinya dengan warna merah ketika
ship_mask.overlap(ball_mask, offset)menemukan sebuah titik, menggunakan offset dariship_rectkeball_rect; jika tidak, warnai dengan warna abu-abu.
Coba sendiri
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Near Miss")
clock = pygame.time.Clock()
ship = pygame.image.load("assets/images/ship.png").convert_alpha()
ship_rect = ship.get_rect(topleft=(420, 320))
ball = pygame.image.load("assets/images/spike_ball.png").convert_alpha()
ball_rect = ball.get_rect(center=(320, 240))
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 -= 4
if keys[pygame.K_RIGHT]:
ship_rect.x += 4
if keys[pygame.K_UP]:
ship_rect.y -= 4
if keys[pygame.K_DOWN]:
ship_rect.y += 4
screen.fill((20, 22, 40))
screen.blit(ball, ball_rect)
screen.blit(ship, ship_rect)
if ship_rect.colliderect(ball_rect):
colour = (230, 60, 60)
else:
colour = (90, 90, 120)
pygame.draw.rect(screen, colour, ball_rect, 2)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
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