He estado haciendo pong con pygame y conseguí que la pelota rebotara alrededor de la pantalla y en las paletas. Sin embargo, la velocidad es demasiado alta y quiero disminuirla. Así es como se ve el código para el objeto Ball:
import pygame as pg BLACK = (0, 0, 0) class Ball(pg.sprite.Sprite): def __init__(self, color, width, height, radius): super().__init__() self.x_vel = 1 self.y_vel = 1 self.image = pg.Surface([width * 2, height * 2]) self.image.fill(BLACK) self.image.set_colorkey(BLACK) pg.draw.circle(self.image, color, center=[width, height], radius=radius) self.rect = self.image.get_rect() def update_ball(self): self.rect.x += self.x_vel self.rect.y += self.y_velSi trato de establecer la velocidad como un flotador, detiene la pelota por completo. ¿Alguien me puede ayudar?
Usa pygame.time.Clock para controlar los fotogramas por segundo y, por lo tanto, la velocidad del juego.
El método tick() de un objeto pygame.time.Clock retrasa el juego de tal manera que cada iteración del ciclo consume el mismo período de tiempo. Ver pygame.time.Clock.tick() :
Este método debe llamarse una vez por cuadro.
Eso significa que el bucle:
clock = pygame.time.Clock() run = True while run: clock.tick(100)
corre 100 veces por segundo.
Dado que se supone que pygame.Rect representa un área en la pantalla, un objeto pygame.Rect solo puede almacenar datos integrales.
Las coordenadas de los objetos Rect son todos enteros. [...]
La parte fraccionaria de las coordenadas se pierde cuando el movimiento del objeto se asigna al objeto Rect .
Si desea almacenar posiciones de objetos con precisión de punto flotante, debe almacenar la ubicación del objeto en variables separadas, respectivamente, atributos y sincronizar el objeto pygame.Rect . round las coordenadas y asígnalas a la ubicación del rectángulo:
class Ball(pg.sprite.Sprite): def __init__(self, color, width, height, radius): # [...] self.rect = self.image.get_rect() self.x = self.rect.x self.y = self.rect.y def update_ball(self): self.x += self.x_vel self.y += self.y_vel self.rect.x = round(self.x) self.rect.y = round(self.y)