如何解决屏幕 pygame 上仅添加了 2 个精灵
我正在尝试制作一个简单的 pygame 迷宫,但我遇到了一个问题,即只显示了 2 个精灵:一个玩家和一堵墙,而我看到它们都正确地添加到了精灵列表中
PINK = (221,160,221)
WHITE = (255,255,255)
BLUE = (29,32,76)
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
FPS = 30
class Player(pygame.sprite.Sprite):
def __init__(self,x,y,img='alien.png'):
# Call the parent's constructor
super().__init__()
self.image = pygame.image.load(img).convert_alpha()
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
# Set speed vector
self.change_x = 0
self.change_y = 0
self.walls = None
def update(self):
# Horizontal movement
self.rect.x += self.change_x
# Check if object stumbles upon an obstacle
block_hit_list = pygame.sprite.spritecollide(self,self.walls,False)
for block in block_hit_list:
if self.change_x > 0: # If the object was moving right
self.rect.right = block.rect.left # Align its right border with the left border of an obstacle
else: # If the object was moving left
self.rect.left = block.rect.right # Align its left border with the right border of an obstacle
# Vetical movement
self.rect.y += self.change_y
# Check if object stumbles upon an obstacle
block_hit_list = pygame.sprite.spritecollide(self,False)
for block in block_hit_list:
if self.change_y > 0: # If the object was moving up
self.rect.bottom = block.rect.top # Align its upper border with the down border of an obstacle
else: # If the object was moving down
self.rect.top = block.rect.bottom # Align its down border with the up border of an obstacle
class Wall(pygame.sprite.Sprite):
def __init__(self,width,height):
super().__init__()
self.image = pygame.Surface([width,height])
self.image.fill(BLUE)
self.rect = self.image.get_rect()
self.rect.y = y
self.rect.x = x
pygame.init()
screen = pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT])
pygame.display.set_caption('Maze game')
all_sprite_list = pygame.sprite.Group()
wall_list = pygame.sprite.Group()
for x in range(len(walls)):
for y in range(len(walls)):
if walls[x][y] == 1:
#print(x,y)
wall = Wall(x,20,20)
wall_list.add(wall)
all_sprite_list.add(wall)
player = Player(maze.start[0],maze.start[1])
player.walls = wall_list
all_sprite_list.add(player)
clock = pygame.time.Clock()
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.change_x = -3
elif event.key == pygame.K_RIGHT:
player.change_x = 3
elif event.key == pygame.K_UP:
player.change_y = -3
elif event.key == pygame.K_DOWN:
player.change_y = 3
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player.change_x = 0
elif event.key == pygame.K_RIGHT:
player.change_x = 0
elif event.key == pygame.K_UP:
player.change_y = 0
elif event.key == pygame.K_DOWN:
player.change_y = 0
screen.fill(PINK)
all_sprite_list.update()
all_sprite_list.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
其中 maze.grid
是一个由 0 和 1 组成的二维 np 数组,maze.start
是一个像 (0,9) 这样的元组。
当我将 wall = Wall(x,20)
行中的高度和宽度参数更改为 wall = Wall(x,1,1)
时,我看到屏幕上出现一个小迷宫,但如果我增加墙的高度和宽度,我只会看到顶部的一个正方形窗口的左角。我认为问题是我希望它在 20x20px 块上添加每个墙,但它在 1x1px 块上添加。我怎样才能解决这个问题?
有没有办法不只是通过 1x1px 块来处理坐标?
解决方法
实际上,所有对象都被绘制,但绘制在另一个之上。
在嵌套循环中x
和y
是网格中的索引(walls
),而不是左上角的坐标。您需要通过乘以一个单元格的大小 (20) 来计算每个单元格的角点坐标:
wall = Wall(x,y,20,20)
wall = Wall(x*20,y*20,20)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。