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

כל השיעורים ביחידה לולאת המשחק

תרגלו בעצמכם: Pygame אונליין