المستطيلات تبدو غير منصفة
جزء من قسم الكائنات والصور في رحلة 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ين، لكن الصورتين لا تتداخلان. في اللعبة، يعني ذلك خسارة حياة بلا سبب، واللاعبون يلاحظون ذلك.
تختبر الدروس التالية الصورتين نفسيهما.
التحدي
سهلبعد رسم الكرة والسفينة، ارسم إطارًا حول 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()
جميع دروس الكائنات والصور
4الكائنات الرسومية والمجموعات
صنف Spriteالمجموعاتالإزالة باستخدام kill()الالتقاط باستخدام spritecollideمجموعة ضد مجموعة2دوّر واقلب وغيّر الحجم
التدوير حول المركزوجّهها في اتجاه الطيرانغيّر حجم الصورةدوّر انطلاقًا من الصورة الأصلية5تصادمات مثالية على مستوى البكسل
المستطيلات تبدو غير منصفةالأقنعةكائنات Sprite مثالية على مستوى البكسلمناطق التصادم الدائرية6التحريك باستخدام أوراق الرسوم المتحركة
قصّ ورقة الرسوم المتحركةعداد الإطاراتالتحريك باستخدام الوقتانفجار لمرة واحدةتدرّب بنفسك: Playground لـ Pygame