Seite 1 von 1

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

Verfasst: Montag 13. Juni 2022, 18:27
von IgnibusAurea
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()

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

Verfasst: Dienstag 14. Juni 2022, 07:39
von Sirius3
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()

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

Verfasst: Dienstag 14. Juni 2022, 09:49
von __blackjack__
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.