Pygame Spielfigur mit dauer tastendruck bewegen

1 Antwort

Hallo Niki,

mir ist aufgefallen, dass nicht alle files auf dem github sind, aber das ist nur nebensächlich.

Du musst für diesen Fall etwas umbauen wobei ich auch nicht sicher bin ob folgendes der best case ist, von Xbox Controllern weiß ich das die events kontinuierlich abgefeuert werden. Das macht meiner Meinung nach auch Sinn um bei X & Y Axis möglichst genaue angaben zu machen.

Hier möchte ich aber nur eine einfache Variante aufzeigen.

Folgendes, wenn jemand den KEYPRESS Event feuert dann musst du solange die Aktion ausführen bis der User ein KEYUP (oder eine andere Aktion) tätigt und dann stoppst du die Aktion.

Hier ein Beispiel zur Veranschaulichung (das ist nicht perfekt ich habe es selbst kopiert. Z.B. möchte man wahrscheinlich auch dass pressed_left = false ist wenn der user nach rechts läuft!!!):

while True:
# event loop
for event in pygame.event.get():
    #Hier die Action die dann unabhängig vom KeyEvent getriggert wird mit doAction
    doAction()
    if event.type == pygame.QUIT: 
        sys.exit()        
    elif event.type == pygame.KEYDOWN:          # check for key presses          
        if event.key == pygame.K_LEFT:        # left arrow turns left
            pressed_left = True
        elif event.key == pygame.K_RIGHT:     # right arrow turns right
            pressed_right = True
        elif event.key == pygame.K_UP:        # up arrow goes up
            pressed_up = True
        elif event.key == pygame.K_DOWN:     # down arrow goes down
            pressed_down = True
    elif event.type == pygame.KEYUP:            # check for key releases
        if event.key == pygame.K_LEFT:        # left arrow turns left
            pressed_left = False
        elif event.key == pygame.K_RIGHT:     # right arrow turns right
            pressed_right = False
        elif event.key == pygame.K_UP:        # up arrow goes up
            pressed_up = False
        elif event.key == pygame.K_DOWN:     # down arrow goes down
            pressed_down = False

def doAction(self):
   if self.PressedLeft:
        manx -= 10
niki308 
Fragesteller
 23.12.2014, 11:51

Hi,

Danke schon mal für die Antwort hat mir die Augen halb geöffnet :D

Jetzt hab ich aber ein Problem und zwar in meinem ** Code kann ich das nirgendwo einsetzen. Egal wo ich das einsetze gibt es eine von den beiden Fehlermeldungen.

Wenn ich es nach "doAction()" einsetze:

Traceback (most recent call last):
File "impossible.py", line 71, in <module>
  doAction()
NameError: name 'doAction' is not defined

Wenn ich es vor "doAction()" einsetze:

Traceback (most recent call last):
 File "impossible.py", line 75, in <module>
    doAction()
File "impossible.py", line 38, in doAction
 manx -= 10
UnboundLocalError: local variable 'manx' referenced before assignment

Es spielt auch keine Rolle wie ich es einsetze :(

Kannst du mir bitte die Website sagen oder vielleicht die Lösung dieses Problems? :)

0