Menu
CoddyTech

Vector2

Termasuk bagian Perulangan Game dalam perjalanan Pygame di Coddy. Pelajaran 20 dari 32.

Posisi terdiri dari dua angka, begitu juga kecepatan: kecepatan pada sumbu x dan kecepatan pada sumbu y. pygame.Vector2 menyimpan dua angka bersama dan melakukan operasi aritmetika pada keduanya sekaligus:

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

pos += vel * dt

vel * dt mengalikan kedua komponennya dan pos += ... menjumlahkan kedua komponennya, jadi satu baris menggerakkan bola 150 piksel per detik ke kanan dan 90 piksel ke bawah. pos.x dan pos.y membaca atau mengubah satu komponen, dan pygame.draw.circle menerima Vector2 sebagai titik pusatnya.

Untuk memantul dari dinding, balikkan satu komponen kecepatan. Saat melewati salah satu sisi, vel.x = -vel.x mengirim bola kembali dan membiarkan kecepatannya ke atas dan ke bawah tetap sama:

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

Jari-jari bola adalah 16, jadi pada posisi 16 dan 464, tepinya menyentuh sisi jendela.

challenge icon

Tantangan

Sedang
  1. Ganti x, y dengan pos = pygame.Vector2(240, 180) dan vx, vy dengan vel = pygame.Vector2(150, 90).
  2. Gerakkan bola dengan pos += vel * dt dan gambar bola di pos.
  3. Balikkan arah vel.x saat pos.x kurang dari 16 atau lebih dari 464, dan vel.y saat pos.y kurang dari 16 atau lebih dari 344.

Coba sendiri

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

Semua pelajaran di Perulangan Game

Latihan sendiri: Playground Pygame