我已经在这款平台游戏上工作了几个月了,我遇到了一个问题:当我试图加载关卡的贴图时,它们没有显示出来。另外,当我尝试.blit()贴图时,游戏会非常滞后。使用.convert()和.convert_alpha()有帮助,但它并没有完全消除它,或者至少不足以使游戏具有可玩性。我试着做一个单独的for循环加载瓷砖一个接一个地更新他们的位置后,但它没有改变任何东西。我尝试在.blit()函数之后使用.flip()和pygame.display.update(),但是无效。
这是Tile类:
class Tile(pygame.sprite.Sprite):
def __init__(self,pos,size):
super().__init__()
self.image = pygame.Surface((size,size))
self.rect = self.image.get_rect(topleft = pos)
def update(self,x_shift,y_shift,png,screen):
self.rect.x += x_shift
self.rect.y += round(y_shift)
screen.blit(png, (self.rect.x, self.rect.y))
游戏循环(不要介意混乱的代码):
def run(self):
player = self.player.sprite
if self.innit == "false":
self.innit = "true"
self.scroll_y_position = player.rect.y
if self.menu == "false":
self.menu = "true"
self.button = Button((200,200),"start")
self.go = "no"
if self.go == "no":
self.go = self.button.update_start()
self.button.update(self.display_surface)
#Everything above this comment is just for the menu and the innit function, the real game loop is below this comment
else:
self.player.update()
self.tiles.update(self.world_shiftx, self.world_shifty,self.tile_image,self.display_surface)
self.dangers.update(self.world_shiftx, self.world_shifty)
self.dangers.draw(self.display_surface)
self.portals.update(self.world_shiftx, self.world_shifty)
self.portals.draw(self.display_surface)
self.scroll_x()
player.rect.x += player.direction.x * player.speed
self.horizontal_movement_collision()
self.scroll_y()
player.rect.y += player.direction.y + self.world_shifty
self.vertical_movement_collision()
self.player.draw(self.display_surface)
self.scroll_y_position += player.direction.y - 0.8
self.player_events()
和tile_image变量:
self.tile_image = pygame.image.load("/home/yzaques/Platformer/tile.png")
您正在使用pygame.sprite.Sprite
s。可能你的精灵是通过pygame.sprite.Group.draw
绘制的。该方法使用精灵的rect
和image
属性来绘制它们。因此,您需要更改image
属性,而不是尝试blit
新的位图:
class Tile(pygame.sprite.Sprite):
def __init__(self,pos,size):
self.image = pygame.Surface((size,size))
self.rect = self.image.get_rect(topleft = pos)
def update(self,x_shift,y_shift,png,screen):
self.rect.x += x_shift
self.rect.y += round(y_shift)
self.image = png
self.rect = self.image.get_rect(center = self.rect.center)