Menu
CoddyTech

Vector2

جزء من قسم حلقة اللعبة في رحلة Pygame على Coddy. الدرس 20 من 32.

الموضع عبارة عن رقمين، وكذلك السرعة: السرعة في x والسرعة في y. يجمع pygame.Vector2 رقمين معًا ويجري العمليات الحسابية عليهما في الوقت نفسه:

pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)

pos += vel * dt

تضرب vel * dt كلا الجزأين، وتضيف pos += ... كلا الجزأين، لذا يحرك سطر واحد الكرة 150 بكسل في الثانية إلى اليمين و90 إلى الأسفل. تقرأ pos.x وpos.y أحد الجزأين أو تغيّره، وتأخذ pygame.draw.circle قيمة Vector2 لمركزها.

للارتداد عن جدار، اعكس اتجاه أحد جزأي السرعة. بعد تجاوز أحد الجوانب، تعيد vel.x = -vel.x الكرة إلى الوراء، مع إبقاء سرعتها إلى الأعلى والأسفل كما هي:

if pos.x < 16 or pos.x > 464:
    vel.x = -vel.x

نصف قطر الكرة 16، لذا عند 16 و464 تلامس حافتها جانبي النافذة.

challenge icon

التحدي

متوسط
  1. استبدل x, y بـ pos = pygame.Vector2(240, 180)، واستبدل vx, vy بـ vel = pygame.Vector2(150, 90).
  2. حرّك الكرة باستخدام pos += vel * dt وارسمها عند pos.
  3. اعكس اتجاه vel.x عندما تكون pos.x أقل من 16 أو أكبر من 464، واعكس اتجاه vel.y عندما تكون pos.y أقل من 16 أو أكبر من 344.

جرّب بنفسك

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Bounce")
clock = pygame.time.Clock()

x, y = 240, 180
vx, vy = 150, 90
dt = 0

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    x += vx * dt
    y += vy * dt

    screen.fill((30, 30, 46))
    pygame.draw.circle(screen, (80, 160, 255), (x, y), 16)
    pygame.display.flip()
    dt = clock.tick(60) / 1000

pygame.quit()

جميع دروس حلقة اللعبة

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