2015-12-06 3 views
0

Привет Я пытаюсь создать платформер, где края экрана действуют как стены. Однако проблема заключается в том, что игрок проходит через стену. Вот функция, которая проверяет наличие стен:столкновение с pygame wall игнорируется

def check_walls(self): 
    if self.rect.right >= WIDTH: 
     self.speedx = 0.5 
    if self.rect.left >= WIDTH - WIDTH: 
     self.speedx = -0.5 

А вот код, который делает игрок шаг, я думаю, что это кусок кода, который на самом деле вызывает эту проблему, но я не знаю, как исправить это:

def update(self): 
    self.speedx = 0 
    # The speedy is above in the __init__ for the player jumping movement 
    self.onGround = True 

    keystate = pygame.key.get_pressed() 

    if self.rect.y <= GROUND - BLOCK_DIM: 
     self.speedy += self.gravity 
     self.onGround = False 
    elif self.rect.y >= GROUND - BLOCK_DIM: 
     self.speedy = 0 
     self.onGround = True 


    if keystate[pygame.K_LEFT]: 
     self.speedx = -5 
    if keystate[pygame.K_RIGHT]: 
     self.speedx = 5 
    if keystate[pygame.K_UP]: 
     self.jump() 
    self.rect.x += self.speedx 
    self.rect.y += self.speedy 

есть ли лучший способ, чтобы проверить наличие столкновений между игроком и стеной, примите во внимание, что стены просто экран границы не спрайты. Также в check_walls() вызывается в инициализации который не добавлен здесь

ответ

1

Я думаю, что вы имели в виду сделать:

def check_walls(self): 
    if self.rect.right >= WIDTH: 
     self.speedx = -0.5 
    if self.rect.left <= 0: 
     self.speedx = 0.5 

также, где вы называете check_walls?

+0

check_walls находится в init – ModoUnreal

+0

от init вы имеете в виду класс __init__? вы должны, вероятно, вызвать check_walls каждый анимационный кадр, а не только один раз в начале. –

+0

Я попробую! – ModoUnreal

Смежные вопросы