Menu
CoddyTech

Dikdörtgenler Haksız Hissettiriyor

Coddy'nin Pygame Journey'sinin Sprite'lar ve Görseller bölümünün bir parçası. Ders 21 / 36.

Ok tuşlarıyla gemiyi dikenli topa doğru uçur. Rect çarpışmaları, colliderect, hızlı ve basittir; ancak yuvarlak bir top söz konusu olduğunda yanlış sonuç verir. Topun Rect'i, etrafındaki karedir; şeffaf köşeleri de buna dahildir. Geminin Rect'inde ise burnunun yanında boş alan vardır.

Testi görünür hâle getir: topun Rect'inin çevresini çiz ve colliderect sonucuna göre bu çizginin rengini değiştir.

if ship_rect.colliderect(ball_rect):
    colour = (230, 60, 60)
else:
    colour = (90, 90, 120)
pygame.draw.rect(screen, colour, ball_rect, 2)

Ardından topa sağ alttan yaklaş. Gemiyle dikenler arasında hâlâ belirgin bir gökyüzü boşluğu varken çizgi kırmızıya döner: İki Rect'in köşeleri üst üste biner, görseller ise binmez. Bir oyunda bu, boş yere can kaybetmek demektir ve oyuncular bunu fark eder.

Sonraki derslerde görsellerin kendileri sınanacak.

challenge icon

Görev

Kolay

Topu ve gemiyi çizdikten sonra ball_rect'in dış çizgisini 2 piksel kalınlığında çiz: ship_rect onunla çarpışırken kırmızı (230, 60, 60), aksi hâlde gri (90, 90, 120). Ardından gemiyi sağ alttan içeri uçur ve köşelere dikkat et.

Kendin dene

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

Sprite'lar ve Görseller bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground