Soy novato y con problemas de ingles pero después de leer documentación de python y algo sobre pygame (entre ellos el ejemplo de car que encontré en esta misma web) quise hace la prueba de un coche que se moviese por la pantalla, bueno en realidad algo como un tanque por que quería que girase sobre si mismo. He conseguido hacer que avance y gire pero tengo básicamente dos problemas:
-La imagen solo gira en el momento de pulsar la tecla y no si se mantiene pulsada
-Si se pulsa la tecla de avance (K_UP) comienza a moverse pero si se cambia el ángulo de la imagen la dirección no se actualiza asta que se suelta la tecla "K_UP"
Probé de poner los eventos de teclado como en el ejemplo de car pero con eso no se por que no me reconoce que pulso las teclas. Y al cambiarlos de sitio me hace el mismo efecto. Gracias de antemano y disculpen las molestias, solo decir que valoro vuestro tiempo pero llevo horas encallado sin encontrar solución.
aquí va el código:
- Código: Seleccionar todo
import pygame
from pygame.locals import *
from math import sin, cos, radians
class coche (pygame.sprite.Sprite):
def __init__ (self, startpos):
pygame.sprite.Sprite.__init__(self)
self.image_original = pygame.image.load ("coche.png")
self.image = self.image_original.copy()
self.rect = self.image.get_rect()
self.rect.center = startpos
self.angle = 0
self.vel = [0,0]
def update (self):
# *ESTA PARTE NO ME RESPONDE
# key = pygame.key.get_pressed()
# if key == [K_LEFT]:
# self.angle -= 10
# elif key == [K_RIGHT]:
# self.angle += 10
#
# if key == [K_UP]:
# angle = radians(self.angle)
# self.vel[0] = cos(angle) * 7
# self.vel[1] = sin(angle) * 7
# else:
# self.vel = [0,0]
# *ESTA PARTE NO FUNCIONA COMO QUIERO
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_LEFT:
self.angle -= 10
elif event.key == K_RIGHT:
self.angle += 10
if event.key == K_UP:
angle = radians(self.angle)
self.vel[0] = cos(angle) * 7
self.vel[1] = sin(angle) * 7
elif event.type == KEYUP:
if event.key == K_UP:
self.vel[0] = 0
self.vel[1] = 0
elif event.key == K_LEFT:
pass
self.rect.move_ip (self.vel)
self.updaterot()
def updaterot (self):
self.oldCenter = self.rect.center
self.image = pygame.transform.rotate ( self.image_original, - self.angle)
self.rect = self.image.get_rect()
self.rect.center = self.oldCenter
def main():
pygame.init()
screen = pygame.display.set_mode((1000,1000))
clock = pygame.time.Clock()
cochesprite = pygame.sprite.RenderClear()
cochei = coche((500, 500))
cochesprite.add (cochei)
while 1:
# *AUNQUE LO PONGA AQUI NO FUNCIONA COMO QUIERO
#for event in pygame.event.get():
# if event.type == QUIT:
# sys.exit()
# if event.type == KEYDOWN:
# if event.key == K_LEFT:
# cochei.angle -= 10
#
# elif event.key == K_RIGHT:
# cochei.angle += 10
# *ESTA PARTE NO RESPONDE A LAS TECLAS
#key = pygame.key.get_pressed()
#if key[K_LEFT]:
# cochei.angle += 10
#elif key[K_RIGHT]:
# cochei.angle -= 10
cochesprite.update()
screen.fill((0, 0, 0))
cochesprite.draw (screen)
pygame.display.update()
clock.tick(60)
if __name__ == '__main__': main()