pygame.KEYDOWN und pygame.key.get_pressed() funktionieren nicht was mach ich falsch?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
IgnibusAurea
User
Beiträge: 2
Registriert: Donnerstag 9. Juni 2022, 14:46

Ich möchte die K Taste benutzen aber nur die tasten außen rum Reagieren. Die Buchstaben wollen nicht.
ich möchte nur das die Taste 1mal den Befehl ausführt die anderen tasten sollen sogar denn befehl dauerhaft ausführen.
ich hab die Dokumentation durch geschaut aber nicht verstanden welcher Code schnipseln für die richtige schreibweise im code Verantwortlich ist:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import random

import Namensgenerator as NG
import pygame
import sys

screen = pygame.display.set_mode((337, 486))

def leere_karte(x,y):
leere_karte = pygame.image.load("LeereKarte.png")
screen.blit(leere_karte, (x, y))


def main():
go = True
while go:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()

gedrueckt = pygame.key.get_pressed()
einmalig_gedruekt = pygame.KEYDOWN

#if gedrueckt[pygame.K_k]:
#print("Spieler hat Taste gedrückt")

# Taste für Spieler 1
if gedrueckt[pygame.K_UP]:
print("Spieler hat Pfeiltaste hoch gedrückt")

elif gedrueckt[pygame.K_DOWN]:
print("Spieler hat Pfeiltaste runter gedrückt")

if pygame.KEYDOWN == pygame.K_k:
print("Spieler hat Taste gedrückt")


screen.fill((130, 251, 255))
leere_karte(0,0)
pygame.display.update()


if __name__ == '__main__':
main()
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Module werden wie Variablennamen oder Funktionen komplett klein geschrieben. Benutze keine kryptischen Abkürzungen. `Namensgenerator` ist ein aussagekräftiger Name, wird aber noch gar nicht benutzt.
Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. Funktionen sollten nach Tätigkeiten benannt werden `leere_karte` ist aber keine Tätigkeit.
`go` ist immer True, das kann also weg.
Nach einem : fängt eine neue Zeile an, sys.exit sollte man nicht verwenden, ein Programm endet, wenn die `main`-Funktion verlassen wird.
`pygame.KEYDOWN` ist eine Konstante für ein Event, `pygame.K_k` ist eine Konstante für eine Taste. Warum glaubst Du, dass die jemals gleich sein?
pygame.init() fehlt, ebenso pygame.quit().

Code: Alles auswählen

#!/usr/bin/python
import random
import pygame
import namensgenerator


def display_leere_karte(screen, leere_karte, x, y):
    screen.blit(leere_karte, (x, y))

def main():
    try:
        pygame.init()
        screen = pygame.display.set_mode((337, 486))
        leere_karte = pygame.image.load("LeereKarte.png")
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    return
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_k:
                        print("Spieler hat Taste gedrückt")

            gedrueckt = pygame.key.get_pressed()
            # Taste für Spieler 1
            if gedrueckt[pygame.K_UP]:
                print("Spieler hat Pfeiltaste hoch gedrückt")

            elif gedrueckt[pygame.K_DOWN]:
                print("Spieler hat Pfeiltaste runter gedrückt")

            screen.fill((130, 251, 255))
            display_leere_karte(screen, leere_karte, 0, 0)
            pygame.display.update()
    finally:
        pygame.quit()

if __name__ == '__main__':
    main()
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Aus dem ``elif`` bei der Auswertung von `gedrueckt` würde ich ein ``if`` machen, denn der Spieler kann durchaus *beide* Tasten aktuell gedrückt halten.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten