Seite 1 von 1

Player movement stuckt :/

Verfasst: Montag 18. Mai 2015, 21:17
von N4SONIC
Hallo ich brauche Hilfe mit meinen Code. Wenn ich versuche mich mit denn Player zu bewegen stuckt es.

Code: Alles auswählen

import pygame

pygame.init()

window = pygame.display.set_mode((800,600))

pygame.display.set_caption("Window")

class Player(object):
    def __init__(self):
        self.rect = pygame.Rect(400,300,50,50)
        self.health = 100

    def move(self,dx,dy):
        if dx != 0:
            self.move_single_axis(dx,0)
        if dy != 0:
            self.move_single_axis(0,dy)

    def move_single_axis(self,dx,dy):
        self.rect.x += dx
        self.rect.y += dy

        for block in blocklist:
            if self.rect.colliderect(block.rect):
                if dx > 0:
                    self.rect.right = block.rect.left
                if dx < 0:
                    self.rect.left = block.rect.right
                if dy > 0:
                    self.rect.bottom = block.rect.top
                if dy < 0:
                    self.rect.top = block.rect.bottom

class Block(object):
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.rect = pygame.Rect(self.x,self.y,50,50)

    def render(self,window):
        pygame.draw.rect(window,(0,0,0),self.rect)

class Health:
    def __init__(self):
        self.health = pygame.Rect(100,100,10,100)

    def render(self,window):
        font = pygame.font.SysFont("arial",20)
        str = font.render("Leben: {0}".format(player.health),True,(0,0,0))
        window.blit(str,(10,10))

player = Player()
health = Health()

level1 = [
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
]

blocklist = []

for y in range(0,len(level1)):
    for x in range(0,len(level1[y])):
        if level1[y][x] == 1:
            blocklist.append(Block(x*32,y*32))

clock = pygame.time.Clock()

running = True
while running:

    for event in pygame.event.get():

        if event.type==pygame.QUIT:

            running = False

        key = pygame.key.get_pressed()
        if key[pygame.K_LEFT]:
            player.move(-5,0)
        if key[pygame.K_RIGHT]:
            player.move(+5,0)
        if key[pygame.K_DOWN]:
            player.move(0,+5)
        if key[pygame.K_UP]:
            player.move(0,-5)

    window.fill((255,255,255))

    health.render(window)
    pygame.draw.rect(window,(0,0,0),player.rect)

    for block in blocklist:
        block.render(window)

    clock.tick(60)
    pygame.display.flip()

pygame.quit()
MFG N4SONIC :)

Re: Player movement stuckt :/

Verfasst: Donnerstag 21. Mai 2015, 12:22
von bwbg

Code: Alles auswählen

while running:
    for event in pygame.event.get():
        # ...
        key = pygame.key.get_pressed()
        if key[pygame.K_LEFT]:
            player.move(-5,0)
        # ...
Sicher, dass der Aufruf von pygame.key.get_pressed() dort hin gehört? Er würde nur dann aufgerufen, wenn tatsächlich ein event ausgelöst wurde. Die Funktion erweckt den Eindruck, dass diese unabhängig von einer Ereignisschleife aufzurufen ist.

Re: Player movement stuckt :/

Verfasst: Donnerstag 21. Mai 2015, 13:09
von BlackJack
Erstens das und zweitens bin ich mir ziemlich sicher die Funktion sollte gar nicht benutzt werden. Jedenfalls nicht wenn man alle Tastendrücke zuverlässig erfassen möchte. Man möchte doch eigentlich eher auf die entsprechenden KEYDOWN- und KEYUP-Ereignisse warten/reagieren.

Re: Player movement stuckt :/

Verfasst: Donnerstag 21. Mai 2015, 14:17
von N4SONIC
Vielen Dank für die Antworten es Funktioniert jetzt :)