Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Setelah 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

Latihan sendiri: Playground Pygame