Wenn ich mit dem Player die Wall berühre passiert das was passieren soll der Player bleibt stehen. Aber wenn ich dann nach links oder rechts dabei lenke dann bewegt der Player sich zu der anderen Wall warum ?
Code: Alles auswählen
import pygame
black = (0,0,0)
moveSpeed = 4
class Player:
def __init__(self):
self.rect = pygame.Rect(400,300,50,50)
self.change_x = 0
self.change_y = 0
def render(self,window):
pygame.draw.rect(window,black,self.rect)
self.rect.x += self.change_x
self.rect.y += self.change_y
for wall in walls:
if self.rect.colliderect(wall.rect):
if self.change_x > 0:
self.rect.right = wall.rect.left
if self.change_x < 0:
self.rect.left = wall.rect.right
if self.change_y > 0:
self.rect.bottom = wall.rect.top
if self.change_y < 0:
self.rect.top = wall.rect.bottom
class Wall:
def __init__(self,x,y):
self.x = x
self.y = y
self.rect = pygame.Rect(self.x,self.y,50,50)
walls.append(self)
def render(self,window):
pygame.draw.rect(window,black,self.rect)
player = Player()
pygame.init()
window = pygame.display.set_mode((800,600))
pygame.display.set_caption("Platformer")
clock = pygame.time.Clock()
level_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,1,1,1,1,1,1,1,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]
]
walls = []
for y in range(0,len(level_1)):
for x in range(0,len(level_1[y])):
if level_1[y][x] == 1:
walls.append(Wall(x*50,y*50))
running = True
while running:
for event in pygame.event.get():
if event.type==pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.change_x -= moveSpeed
if event.key == pygame.K_RIGHT:
player.change_x += moveSpeed
if event.key == pygame.K_UP:
player.change_y -= moveSpeed
if event.key == pygame.K_DOWN:
player.change_y += moveSpeed
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player.change_x = 0
if event.key == pygame.K_RIGHT:
player.change_x = 0
if event.key == pygame.K_UP:
player.change_y = 0
if event.key == pygame.K_DOWN:
player.change_y = 0
window.fill((255,255,255))
player.render(window)
for wall in walls:
wall.render(window)
clock.tick(60)
pygame.display.flip()
pygame.quit()