[pyar] [pygame] mantener tecla pulsada

Matías Bellone matiasbellone en gmail.com
Sab Jul 7 19:16:48 ART 2012


On Sat, Jul 7, 2012 at 7:05 PM, Angel Java Lopez <ajlopez2000 en gmail.com> wrote:
> 2012/7/7 Christian Guarrera <listacgu en gmail.com>
>>
>> Hola a todos,
>> estoy empezando a ver algo de pygame y no logro hacer que al presionar
>> una tecla y dejarla apretada continue con el evento,
>> por ejemplo:
>>
>>
>>                         if event.type == pygame.KEYDOWN:
>>                             if event.key == pygame.K_LEFT:
>>                                 r1.move_ip(-1,0)
>>                             if event.key == pygame.K_RIGHT:
>>                                 r1.move_ip(1,0)
>>                             if event.key == pygame.K_UP:
>>                                 r1.move_ip(0,-1)
>>                             if event.key == pygame.K_DOWN:
>>                                 r1.move_ip(0,1)
>>
>>
>> todo esto dentro de:
>> for event in pygame.event.get():
>>
>> alguien sabe de que manera puedo solucionarlo?
>
> Hmmmm.. aclaro que no se nada de Pygame ;-)
>
> pero encontre
> http://www.pygame.org/docs/ref/key.html#pygame.key.set_repeat
>

Yo tampoco sé nada de pygame pero pensaba en algo distinto, que está
descripto en los comentarios de ese mismo método: las teclas cambian
el estado del objeto (r1 en este caso), y en cada ciclo del juego el
objeto se actualiza sólo según su estado.

Esto, además, evita el problema que - aparentemente - tiene
set_repeat: sólo genera los eventos para un tecla, aún cuando haya
varias presionadas (por lo que no vas a poder - por ejemplo - simular
movimiento en diagonal o moverte y disparar al mismo tiempo).

En uno de los comentarios lo muestran como:

	if e.type == KEYDOWN:
		if e.key == K_LEFT:
			ship.xspeed -= SPEED
		elif e.key == K_RIGHT:
			ship.xspeed += SPEED
		elif e.key == K_UP:
			ship.yspeed -= SPEED
		elif e.key == K_DOWN:
			ship.yspeed += SPEED
		elif e.key == K_SPACE
			ship.firing = True
	elif e.type == KEYUP:
		if e.key == K_LEFT:
			ship.xspeed += SPEED
		elif e.key == K_RIGHT:
			ship.xspeed -= SPEED
		elif e.key == K_UP:
			ship.yspeed += SPEED
		elif e.key == K_DOWN:
			ship.yspeed -= SPEED
		elif e.key == K_SPACE:
			ship.firing == False
     # y fuera del get event.get hacés que ship se mueva antes de
actualizar el display

Saludos,
Toote
-- 
Web: http://www.enespanol.com.ar



More information about the pyar mailing list