python - pos - set_alpha pygame
Pygame Keyup/Keydown (1)
Sangrado problema. Debes probar tus estados clave en el bucle principal de tu juego, no en tu bucle de eventos. Debes DESACTIVAR tu nivel de prueba de un estado clave.
while 1:
# do init stuff
screen.fill(0)
# .... (all main loop init stuff here)
for event in pygame.event.get():
# test events, set key states
if event.type == pygame.KEYDOWN:
if event.key==K_w:
keys[0]=True
# .... (all event stuff)
# Indent moves back to main game loop
# test key states here...
if keys[0]:
playerpos[1]-=5
elif keys[2]:
playerpos[1]+=5
# .... (and so on)
Estoy haciendo un pequeño Mario para el Computer Club de mi escuela. (bueno, como parte de un equipo.) De todos modos, estoy teniendo problemas con los comandos "keyup / keydown". Aquí está mi código:
# 1 - Import library
import pygame
from pygame.locals import *
# 2 - Initialize the game
pygame.init()
width, height = 1280, 1000
screen=pygame.display.set_mode((width, height))
keys = [False, False, False, False]
playerpos=[100,100]
# 3 - Load images
player = pygame.image.load("images/totallynotgodzilla.png")
# 3.1 - Load Audio
music = pygame.mixer.Sound("audio/skyrim.wav")
# 4 - keep looping through
while 1:
# 5 - clear the screen before drawing it again
screen.fill(0)
# 6 - draw the screen elements
screen.blit(player, playerpos)
# 7 - update the screen
pygame.display.flip()
# 8 - loop through the events
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key==K_w:
keys[0]=True
elif event.key==K_a:
keys[1]=True
elif event.key==K_s:
keys[2]=True
elif event.key==K_d:
keys[3]=True
if event.type == pygame.KEYUP:
if event.key==pygame.K_w:
keys[0]=False
elif event.key==pygame.K_a:
keys[1]=False
elif event.key==pygame.K_s:
keys[2]=False
elif event.key==pygame.K_d:
keys[3]=False
# 9 - Move player
if keys[0]:
playerpos[1]-=5
elif keys[2]:
playerpos[1]+=5
if keys[1]:
playerpos[0]-=5
elif keys[3]:
playerpos[0]+=5
Básicamente, el problema es que cuando presiono una tecla, espera a que ocurra el comando de teclado antes de volver a moverse. Así que, básicamente, tengo que presionar rápidamente los botones para mover.
Eliminé parte del código, así que si falta algo, házmelo saber y te diré si lo tengo o no.