Vector2
חלק מהיחידה לולאת המשחק במסלול ה-Pygame של Coddy. שיעור 20 מתוך 32.
מיקום הוא שני מספרים, וכך גם מהירות: המהירות בכיוון x והמהירות בכיוון y. pygame.Vector2 שומר שני מספרים יחד ומבצע פעולות חשבון על שניהם בבת אחת:
pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)
pos += vel * dtvel * 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()
כל השיעורים ביחידה לולאת המשחק
תרגלו בעצמכם: Pygame אונליין