Vector2
Parte de la sección El bucle del juego del Journey de Pygame de Coddy. Lección 20 de 32.
Una posición son dos números, y una velocidad también: la rapidez en x y la rapidez en y. pygame.Vector2 mantiene juntos dos números y realiza operaciones aritméticas con ambos a la vez:
pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)
pos += vel * dtvel * dt multiplica ambas partes y pos += ... suma ambas partes, así que una línea mueve la pelota 150 píxeles por segundo hacia la derecha y 90 hacia abajo. pos.x y pos.y leen o cambian una parte, y pygame.draw.circle toma un Vector2 como centro.
Para rebotar contra una pared, invierte una parte de la velocidad. Al pasar un lateral, vel.x = -vel.x devuelve la pelota y deja intacta su velocidad vertical:
if pos.x < 16 or pos.x > 464:
vel.x = -vel.xEl radio de la pelota es 16, así que en 16 y 464 su borde toca los laterales de la ventana.
Desafío
Intermedio- Reemplaza
x, yporpos = pygame.Vector2(240, 180)yvx, vyporvel = pygame.Vector2(150, 90). - Mueve la pelota con
pos += vel * dty dibújala enpos. - Invierte
vel.xcuandopos.xsea menor que 16 o mayor que 464, yvel.ycuandopos.ysea menor que 16 o mayor que 344.
Pruébalo tú mismo
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()
Todas las lecciones de El bucle del juego
1Mueve un cuadrado
Abre una ventanaRellena el fondo4Movimiento basado en el tiempo
Tiempo deltaPíxeles por segundoVector2Aceleración y fricciónReaparecer al otro lado de la pantallaPractica por tu cuenta: Playground de Pygame