Tastatureingaben richtig auswerten.

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Mittwoch 17. September 2008, 12:56

Hi.
Ich bin gerade dabei, ein Spiel zu scripten, wo der User am Start seinen Namen eingeben muss, und während des Spiels auch chatten kann (Server-Client-Spiel). Das ganze steht soweit, jetzt komme ich zu dem Teil, vor dem es mir am meisten Graut: Wie bekomme ich die Tastatureingaben richtig hin?

Ich habe bisher folgendes:

Code: Alles auswählen

while True:
	for event in pygame.event.get():
		if event.type == KEYDOWN:
			if 33 <= event.key <= 126 or event.key in [228, 246, 229, 196, 214, 19]:
				if 33 <= event.key <= 126 and (pygame.key.get_mods() & KMOD_SHIFT or pygame.key.get_pressed()[K_CAPSLOCK]):
					name += chr(event.key - 32)
				else:
					name += chr(event.key)
Das ganze lässt Zeichen von a-zA-Z0-9 und einige Sonderzeichen zu. Umlaute funktionieren nicht wirklich, und ein ß kriege ich mit dem ASCII Satz auch nicht hin. Kann mir jemand erklären, bzw. sagen, was ich ändern muss, damit er auch jegliche andere Zeichen erkennt? (ß, }, %, ^^, etc)? Ich kriege das ganze einfach nicht gebacken.

Ein Problem besteht zusätzlich: Sobald ich z.B. a gedrückt halte, wird es nur 1x eingegeben, erst wenn ich es erneut drücke, wird es nochmal erkannt :/

Manchmal erscheinen auch nur diese Kästchen, d.H. das Zeichen ist unbekannt. Was kann ich dagegen tun?

Hoffentlich kann mir jemand von euch Tipps geben :)

Danke im Vorraus,
~ Chris
Grüßle.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mittwoch 17. September 2008, 15:30

das mit den umlauten wird schwirig

ich mach das immer so bei den gängigen tasten

Code: Alles auswählen

        event = pygame.event.poll()
        if event.type == QUIT or \
           (event.type == KEYDOWN and event.key == K_q):
            music.stop()
            start.stop()
            break
        if event.type == KEYDOWN and event.key == K_SPACE and len(shots) < MAX_SHOTS and player.alive():
            Shot(player.rect.midtop)
            shootsound.play()
        if event.type == KEYDOWN and event.key == K_UP and LEVEL == 0:
            MENU_OPTION = 1
        if event.type == KEYDOWN and event.key == K_DOWN and LEVEL == 0:
            MENU_OPTION = 0
        if event.type == KEYDOWN and event.key == K_RETURN and LEVEL == 0:
            start.stop()
            if MENU_OPTION == 1:
                init_level()
                LEVEL = 1
                player = Ship()
                LIVES = 4
                SCORE = 0
            if MENU_OPTION == 0:
                music.stop()
                break
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mittwoch 17. September 2008, 15:33

versuchs mal mit den zeilen als anfang

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import encodings

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import encodings
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Mittwoch 17. September 2008, 16:21

Hi.
Das Encoding habe ich standardmäßig in jeder .py drinne, da ich gerne mal Umlaute benutze. Es liegt vermutlich einfach an der falschen Verarbeitung meinerseits, jedoch weiß ich eben nicht wie ich es richtig mache.

Trotzdem vielen Dank!

~ Chris
Grüßle.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 17. September 2008, 16:40

Wenn du ein lauffähiges minimales Programm postest, dann könnte man es sich ja unter Umständen mal überlegen sich das Problem mal anzusehen und mit dem Code zu spielen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten