Menu
CoddyTech

المستطيلات تبدو غير منصفة

جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 21 من 36.

وجّه السفينة نحو الكرة الشائكة باستخدام مفاتيح الأسهم. تصادمات Rect، باستخدام colliderect، سريعة وبسيطة، لكنها تخطئ في حالة الكرة المستديرة. إن Rect الخاص بالكرة هو المربع المحيط بها، بما في ذلك الزوايا الشفافة، أما Rect الخاص بالسفينة ففيه مساحة فارغة بجانب مقدمتها.

اجعل الاختبار مرئيًا: ارسم إطارًا حول Rect الكرة، ولَوِّن الإطار بحسب ما تقوله colliderect.

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

ثم اقترب من الكرة من أسفل اليمين. يتحول الإطار إلى الأحمر بينما لا تزال هناك فجوة واضحة من السماء بين السفينة والأشواك: تتداخل زاويتا Rectين، لكن الصورتين لا تتداخلان. في اللعبة، يعني ذلك خسارة حياة بلا سبب، واللاعبون يلاحظون ذلك.

تختبر الدروس التالية الصورتين نفسيهما.

challenge icon

التحدي

سهل

بعد رسم الكرة والسفينة، ارسم إطارًا حول ball_rect بعرض 2 بكسل: باللون الأحمر (230, 60, 60) عندما يتصادم ship_rect معها، وباللون الرمادي (90, 90, 120) خلاف ذلك. ثم حرّك السفينة من أسفل اليمين وراقب الزوايا.

جرّب بنفسك

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

جميع دروس الكائنات والصور

تدرّب بنفسك: Playground لـ Pygame