Pygame no me deja usar float para rect.move, pero lo necesito
He recreado recientemente una versión de Lunar Lander (ya saben, el juego retro de edad) en Python 3 y Pygame: mis movimientos (Lander rect.move
) cada marco a lo largo del eje y debido a la gravedad \.
Problema:
Hasta que alcance 1 m / s, el valor y agregado a rect.move es un flotador por debajo de 1: debo usar int()
para redondearlo, ya que a pygame no le gustan los flotadores.
En una versión anterior con Tkinter, la coord y del módulo de aterrizaje era así:
0.01
0.02
...
0.765
1.03
1.45
...
En pygame es
0
0
0
...
1
1
1
2
2
...
Esto es realmente molesto, ya que el movimiento no es fluido. ¿Alguien sabe cómo solucionar esto? ¿Ingresar un flotador para rect.move
? ¡Gracias por adelantado!
Respuestas
Dado que pygame.Rectse supone que representa un área en la pantalla, un pygame.Rect
objeto solo puede almacenar datos integrales:
Las coordenadas de los objetos Rect son todos números enteros. [...]
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 pygame.Rect
objeto. roundlas coordenadas y asígnelo a la ubicación (por ejemplo .topleft
) del rectángulo:
x, y = # floating point coordinates
rect.topleft = round(x), round(y)
No lo he probado yo mismo, así que lo siento si esto no funciona, pero creo que Python está tomando el número como una cadena, así que en lugar de int(variable)
Deberías hacer float(variable)