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 تلامس حافتها جانبي النافذة.
التحدي
متوسط- استبدل
x, yبـpos = pygame.Vector2(240, 180)، واستبدلvx, vyبـvel = pygame.Vector2(150, 90). - حرّك الكرة باستخدام
pos += vel * dtوارسمها عندpos. - اعكس اتجاه
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