Pygame Spielfigur mit dauer tastendruck bewegen
Hi Leute,
Ich programmiere gerade an einem Spiel in pygame.
Jetzt habe ich aber ein Problem und zwar das ich für jede kleinste Bewegung die die Spielfigur macht eine Taste drücken muss, was ziemlich nervt.
Ich habe schon Tutorials gesucht aber keins hat mir geholfen. Ich hoffe ihr könnt mir helfen, der Source Code ist als verlinkt, weil der hier nicht reinpasst ^^
Hier ist der Link: https://github.com/DerNiklas/Impossible-Game/blob/master/impossible.py
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
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? :)