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



 

 (no estoy muy acostumbrado a eso de escribir en los foros, yo soy mas de leer)
 (no estoy muy acostumbrado a eso de escribir en los foros, yo soy mas de leer)