Recuerda que en la informática cualquier problema suele tener varias soluciones, por lo tanto aquí te enseñamos lo más óptimo y mejor.
Solución:
No hay nada integrado en Pygame para esto. Deberá utilizar una biblioteca GUI de terceros o crearla usted mismo. Ejemplo: si el cuadro de texto tiene el foco, tome todos los eventos de pulsación de tecla y añádalos a un string. Cada cuadro, dibuja un cuadro, luego dibuja el string en la parte superior.
Construir uno simple no debería ser tan difícil, pero si desea uno más completo, probablemente será más fácil usar una biblioteca.
Actualmente asumo que esta función trabajada con su programa es exitosa y no genera errores. Aquí hay una función en el enlace que nos diste:
def ask(screen, question):
"ask(screen, question) -> answer"
pygame.font.init()
current_string = []
display_box(screen, question + ": " + string.join(current_string,""))
while 1:
inkey = get_key()
if inkey == K_BACKSPACE:
current_string = current_string[0:-1]
elif inkey == K_RETURN:
break
elif inkey == K_MINUS:
current_string.append("_")
elif inkey <= 127:
current_string.append(chr(inkey))
display_box(screen, question + ": " + string.join(current_string,""))
return string.join(current_string,"")
Parece que así es como obtienes información de un usuario con una pantalla de pygame, ¿verdad? Veamos la línea 4 de esta función:
current_string = []
Las cosas que el usuario escribe se almacenan en esta lista. Suponiendo que sepa cómo tomar una string y ponerlo en la pantalla, podría guardar el string como esto:
string_input = ''.join(current_string)
Si puede hacer una función similar (si esta no funciona), ¡puede hacer lo mismo! Simplemente guarde el primer elemento de la lista que contiene el string en una variable como se muestra arriba. Si tiene algún problema, por favor comente para que pueda editar mi respuesta.
A la siguiente parte ahora. Simplemente puede activar esta función en cualquier momento. Es posible que desee activar cuando algo suceda. Un ejemplo es cuando la serpiente se come la manzana. Probablemente tengas una función para eso, creo. Puedes hacer una variable como esta:
Eat = 0
Y poner en esa función. Cuando esa variable es igual a 0. Nada realmente activa la otra función. Cuando la serpiente se coma la manzana, restablezca la variable a 1 y luego active la función de esta manera:
if Eat = 0:
someclassname.ask()
Haces esto con muchas otras ocasiones. Espero que esto sea más claro y más útil!
¿Has intentado conseguir key eventos y luego juntarlos para formar algo? Podrías poner algo como esto dentro de tu ciclo de juego principal.
input = ''
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
playing = False
if event.key == pygame.K_w:
input = input + "w"
if event.key == pygame.K_s:
input = input + "s"
if event.key == pygame.K_a:
input = input + "a"
Luego, puede verificar cuándo el usuario terminó con la entrada (botón / ingresar key) y finalice la variable. Con esto, puede encontrarse con un problema en el que el key se mantiene más tiempo, por lo que obtiene 3 w por solo presionar el botón una vez. Si este es el caso, puede 1. no permitir otra entrada hasta que haya pasado cierto tiempo (¿.25 s tal vez?) o 2. usar pygame.KEYUP en lugar de pygame.KEYDOWN y verificar exclusivamente los trazos.
Si eres capaz, tienes el poder dejar una crónica acerca de qué te ha gustado de esta noticia.