如何更改地图并删除所有blitted sprite?

时间:2014-05-04 12:26:09

标签: python maps pygame sprite tile

我正在制作一个RPG,在完成我的第一张地图之后,我不得不把它从一个地方传递到另一个地方,因为我不想使用滚动。

实际上,我检查我的角色的位置是否与特定的精灵(门,隐形块等)相同,然后更改字体和加载新的*.txt文件。但问题是以前的精灵还在那里!

我检查了一些方法来解决这个问题,很多人说我应该使用fill()功能覆盖屏幕。它有效,但老精灵仍在那里;如果我的角色试图去到一堵墙的地方,他就不能。

我也尝试清空精灵列表,但它会使游戏崩溃,因为角色在此列表中,即使我重新加载角色......

如果有人能帮助我的话,这是唯一阻止我实现宇宙测试版本的东西..

这是我的游戏循环:

    while continuer_jeu:

            #Limit the speed
            pygame.time.Clock().tick(30)

            for event in pygame.event.get():
                    if event.type == QUIT:
                            continuer_jeu=0
                            continuer_accueil=0
                            continuer_rules=0
                            continuer=0
                            carte=0

                    if event.type == KEYDOWN:
                            #If user press escape => back to the title screen
                            if event.key == K_ESCAPE:
                                    continuer_jeu = 0

                            #Chara's moving key
                            elif event.key == K_RIGHT:
                                    Noc.deplacer('droite')
                            elif event.key == K_LEFT:
                                    Noc.deplacer('gauche')
                            elif event.key == K_UP:
                                    Noc.deplacer('haut')
                            elif event.key == K_DOWN:
                                    Noc.deplacer('bas')

            #Refresh with new positions
            fenetre.blit(fond, (0,0))
            niveau.afficher(fenetre)
            fenetre.blit(Noc.direction, (Noc.x, Noc.y))
            pygame.display.flip()

            if niveau.structure[Noc.case_y][Noc.case_x] == 'ma6': #If going through a door
                    if carte == "n1": # if first map
                            fond = pygame.image.load(image_Interieur).convert()
                            niveau = Niveau("Maison") #Load the house sprites
                            niveau.generer()
                            niveau.afficher(fenetre)
                            fenetre.blit(fond,(0,0))

如果您需要更多代码,请询问。

1 个答案:

答案 0 :(得分:0)

通过删除上一个列表,加载另一个列表,然后重新创建角色,我实现了从地图传递到另一个地图:

            if niveau.structure[Noc.case_y][Noc.case_x] == "up" :
                    if carte == "n1" :
                            fond = pygame.image.load(image_Map2).convert()
                            niveau = Niveau("n2")
                            niveau.reset()
                            niveau.generer()
                            niveau.afficher(fenetre)
                            Noc = Perso("image/Noc right.png", "image/Noc left.png","image/Noc face.png", "image/Noc back.png", niveau)
                            fenetre.blit(fond,(0,0))
                            carte = "n2"

            if niveau.structure[Noc.case_y][Noc.case_x] == "down" :
                    if carte == "n2" :
                            fond = pygame.image.load(image_Map1).convert()
                            niveau = Niveau("n1")
                            niveau.reset()
                            niveau.generer()
                            niveau.afficher(fenetre)
                            Noc = Perso("image/Noc right.png", "image/Noc left.png","image/Noc face.png", "image/Noc back.png", niveau)
                            fenetre.blit(fond,(0,0))
                            carte = "n1"

有这些功能:

class Niveau:
    def __init__(self, fichier):
            self.fichier = fichier
            self.structure = 0
    def reset(self):
            self.structure = []

    def generer(self):
            with open(self.fichier) as fichier:
                    self.structure = [ligne.split() for ligne in fichier]

但是我遇到了另一个问题:我无法再次更改地图。在第二张地图上,角色达不到底,没有任何事情发生。我试着在“up”+“if carte ==”n2“向下”时把指令放进去但是这个角色又回到了他的产卵位置......我哪里可以犯错误?