@_deets_: Dieser Code läuft bei mir nicht. Es kommt keine Fehlermeldung, aber ich sehe nur eine weiße Linie, die nicht auf die Pfeiltasten reagiert. Das Fenster lässt sich nicht regulär schließen.
Ich sehe ebenfalls keinen Grund, warum nur ein Event kommen sollte. Genau deshalb dieser Post. Aber es ist tatsächlich so. Dies habe ich herausgefunden, als ich mir die Events habe ausgeben lassen.
Hier meine für Debugging-Zwecke veränderte handleEvent()
Code: Alles auswählen
def handleEvent():
global ende, snakeDirection, n
for event in pygame.event.get():
print(event)
if event.type == pygame.QUIT:
ende = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
snakeDirection=(+1, 0)
print(" >")
if event.key == pygame.K_LEFT:
snakeDirection=(-1, 0)
print(" <")
if event.key == pygame.K_UP:
snakeDirection=(0, -1)
print(" ^")
if event.key == pygame.K_DOWN:
snakeDirection=(0, 1)
print(" v")
n +=1
print(n)
Und die zugehörige Ausgabe, wenn sich SCHNELL hintereinander Tasten betätige:
Code: Alles auswählen
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Level loaded ... (50 x 30)
<Event(1-ActiveEvent {'gain': 0, 'state': 1})>
1
2
(0, -1)
3
<Event(2-KeyDown {'unicode': '', 'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
^
4
(0, -1)
<Event(3-KeyUp {'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
5
<Event(2-KeyDown {'unicode': '', 'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
>
6
(1, 0)
<Event(3-KeyUp {'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
7
<Event(2-KeyDown {'unicode': '', 'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
^
8
(0, -1)
<Event(3-KeyUp {'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
9
<Event(2-KeyDown {'unicode': '', 'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
>
10
(1, 0)
<Event(3-KeyUp {'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
11
<Event(2-KeyDown {'unicode': '', 'key': 276, 'mod': 4096, 'scancode': 113, 'window': None})>
<
12
(-1, 0)
<Event(3-KeyUp {'key': 276, 'mod': 4096, 'scancode': 113, 'window': None})>
13
<Event(2-KeyDown {'unicode': '', 'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
^
14
(0, -1)
<Event(3-KeyUp {'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
15
<Event(2-KeyDown {'unicode': '', 'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
>
16
(1, 0)
<Event(3-KeyUp {'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
17
<Event(2-KeyDown {'unicode': '', 'key': 276, 'mod': 4096, 'scancode': 113, 'window': None})>
<
18
(-1, 0)
<Event(3-KeyUp {'key': 276, 'mod': 4096, 'scancode': 113, 'window': None})>
19
<Event(2-KeyDown {'unicode': '', 'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
^
20
(0, -1)
<Event(3-KeyUp {'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
21
<Event(2-KeyDown {'unicode': '', 'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
>
22
(1, 0)
<Event(3-KeyUp {'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
23
<Event(2-KeyDown {'unicode': '', 'key': 276, 'mod': 4096, 'scancode': 113, 'window': None})>
<
24
(-1, 0)
<Event(3-KeyUp {'key': 276, 'mod': 4096, 'scancode': 113, 'window': None})>
25
<Event(2-KeyDown {'unicode': '', 'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
^
26
(0, -1)
<Event(3-KeyUp {'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
27
<Event(2-KeyDown {'unicode': '', 'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
>
28
(1, 0)
<Event(3-KeyUp {'key': 275, 'mod': 4096, 'scancode': 114, 'window': None})>
<Event(12-Quit {})>
29
<Event(2-KeyDown {'unicode': '', 'key': 273, 'mod': 4096, 'scancode': 111, 'window': None})>
^
30
(0, -1)
Wie man sieht, wird wirklich immer nur pro Durchlauf von handleEvent() (vgl. Nummerierung, Ausgabe von n) ein einziges Key Event erkannt, obwohl der Logik nach die Schleife alle Events abholen sollte. Es sei denn, da gäbe es einen Puffer, der die ganzen Events nur nacheinander ausgibt, jeweils getrennt durch eine Wartezeit ... Darum ging es mir in diesem Post. Siehe Überschrift.