Persegi Panjang Terasa Tidak Adil
Termasuk bagian Sprite dan Gambar dalam perjalanan Pygame di Coddy. Pelajaran 21 dari 36.
Kemudikan kapal menuju bola berduri dengan tombol panah. Tabrakan Rect, colliderect, cepat dan sederhana, tetapi tidak akurat untuk bola bundar. Rect bola adalah persegi yang mengelilinginya, termasuk sudut-sudut transparan, sedangkan Rect kapal memiliki ruang kosong di samping moncongnya.
Buat pengujiannya terlihat: gambar garis tepi Rect bola dan warnai garis tepinya sesuai hasil colliderect.
if ship_rect.colliderect(ball_rect):
colour = (230, 60, 60)
else:
colour = (90, 90, 120)
pygame.draw.rect(screen, colour, ball_rect, 2)Lalu dekati bola dari kanan bawah. Garis tepinya berubah merah meskipun masih ada celah langit yang jelas antara kapal dan duri-duri: sudut kedua Rect saling tumpang tindih, tetapi gambarnya tidak. Dalam game, itu berarti kehilangan nyawa tanpa alasan, dan pemain akan menyadarinya.
Pelajaran berikutnya menguji gambar itu sendiri.
Tantangan
MudahSetelah menggambar bola dan kapal, gambar garis tepi ball_rect dengan lebar 2 piksel: merah (230, 60, 60) saat ship_rect bertabrakan dengannya, abu-abu (90, 90, 120) jika tidak. Lalu terbangkan kapal dari kanan bawah dan perhatikan sudut-sudutnya.
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)
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