ich versuche gerade mich mit pygame auseinanderzusetzen und nun bin ich auf ein kleines Problem gestoßen.
Im unteren Code wird ein Strich-Männchen gezeichnet und mit den Pfeil-Tasten lässt sich dieses bewegen. In x-Richtung klappt es auch so wie es soll, aber in y-Richtung hält das Männlein nicht an. Man muss erst in die Gegenrichtung drücken, damit es anhält. Das selbe Problem besteht auch, wenn ich die wasd-Tasten benutze (statt die Pfeil-Tasten). Ich verstehe es nicht, das der Code für die y-Achse ja der gleiche ist wie für die x-Achse.
Anmerkung: Ich weiß der Code ist nicht perfekt geschrieben. Man könnte beispielsweise das Männchen als Klasse definieren und ihr findet bestimmt noch einige andere Formfehler. Aber mir geht es nur um den oben beschriebenen Fehler. Dieses kleine Programm soll nur zum Verständnis dienen, damit ich die Benutzung der Tasten begreife.
Könnt ihr mir helfen? Vielen Dank im Voraus.
Code: Alles auswählen
import pygame
# Define some colors
black = (0, 0, 0)
white = (255, 255, 255)
green = (0, 255, 0)
red = (255, 0, 0)
def draw_stick_figure(screen, x, y):
# Head
pygame.draw.ellipse(screen, black, [1 + x, y, 10, 10], 0)
# Legs
pygame.draw.line(screen, black, [5 + x, 17 + y], [10 + x, 27 + y], 2)
pygame.draw.line(screen, black, [5 + x, 17 + y], [x, 27 + y], 2)
# Body
pygame.draw.line(screen, red, [5 + x, 17 + y], [5 + x, 7 + y], 2)
# Arms
pygame.draw.line(screen, red, [5 + x, 7 + y], [9 + x, 17 + y], 2)
pygame.draw.line(screen, red, [5 + x, 7 + y], [1 + x, 17 + y], 2)
# Setup
pygame.init()
# Set the width and height of the screen [width,height]
size = [800, 600]
screen = pygame.display.set_mode(size)
pygame.display.set_caption("My Game")
# Used to manage how fast the screen updates
clock = pygame.time.Clock()
# Hide the mouse cursor
pygame.mouse.set_visible(0)
# Speed in pixels per frame
x_speed = 0
y_speed = 0
# Current position
x_coord = 10
y_coord = 10
# -------- Main Program Loop -----------
done = False
while not done:
# --- Event Processing
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
# User pressed down on a key
elif event.type == pygame.KEYDOWN:
# Figure out if it was an arrow key. If so
# adjust speed.
if event.key == pygame.K_LEFT:
x_speed = -3
elif event.key == pygame.K_RIGHT:
x_speed = 3
elif event.key == pygame.K_UP:
y_speed = -3
elif event.key == pygame.K_DOWN:
y_speed = 3
# User let up on a key
elif event.type == pygame.KEYUP:
# If it is an arrow key, reset vector back to zero
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_speed = 0
elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
y_speed = 0
# --- Game Logic
# Move the object according to the speed vector.
x_coord += x_speed
y_coord += y_speed
# --- Drawing Code
# First, clear the screen to white. Don't put other drawing commands
# above this, or they will be erased with this command.
screen.fill(white)
draw_stick_figure(screen, x_coord, y_coord)
# Go ahead and update the screen with what we've drawn.
pygame.display.flip()
# Limit frames per second
clock.tick(60)
# Close the window and quit.
pygame.quit()