Partage
  • Partager sur Facebook
  • Partager sur Twitter

PYGAME - sprites blittés à l'approche du perso

    21 janvier 2020 à 21:47:24

    Bonjour,

    Je suis en train de me fendre le cerveau sans trouver de solution propre à mon souci:

    Le morceau de code qui permet l'affichage des sprites correspondants a ma map:

    line = 0
            for ligne in self.structure:
                case = 0
                for sprite in ligne:
                    y = case * constants.sprite_size
                    x = line * constants.sprite_size
                    if sprite == 'w':
                        window.blit(wall, (y, x))
                    elif sprite == 'D':
                        window.blit(departure, (y, x))
                    elif sprite == 'N':
                        window.blit(needle, (y, x))
                    elif sprite == 'A':
                        window.blit(alcohol, (y, x))
                    elif sprite == "G":
                        window.blit(guardian, (y, x))
                    elif sprite == 'T':
                        window.blit(toilet_tube, (y, x))
                    case += 1
                line += 1

    et le morceau de code de déplacement / Récupération des items dans le sac à dos:

        def moove(self, direction):
    
            if direction == "right":           
                if self.case_y < (numb_sprites_side - 1):
                    if self.structure[self.case_y +1][self.case_x] != "w":
                        self.case_y += 1
                        self.y = self.case_y * sprite_size            
      
            if direction == "left":
                if self.case_y > 0:
                    if self.structure[self.case_y -1][self.case_x] != "w":
                        self.case_y -= 1
                        self.y = self.case_y * sprite_size
                      
            if direction == "up": 
                if self.case_x > 0:
                    if self.structure[self.case_y][self.case_x -1] != "w":
                        self.case_x -= 1
                        self.x = self.case_x * sprite_size
                       
    
            if direction == "down":
                if self.case_x < (numb_sprites_side - 1):
                    if self.structure[self.case_y][self.case_x +1] != "w":             
                        self.case_x += 1
                        self.x = self.case_x * sprite_size         
    
        def catch_item(self, window):
            needle = pygame.image.load(needle_img).convert_alpha()
            alcohol = pygame.image.load(alcohol_img).convert_alpha()
            toilet_tube = pygame.image.load(toilet_tube_img).convert_alpha()
            back_pack = pygame.image.load(backpack_img).convert()
            syringe = pygame.image.load(syringe_img).convert()
            three_items = pygame.image.load(three_items_img).convert_alpha()
            two_items = pygame.image.load(two_items_img).convert_alpha()
            one_item = pygame.image.load(one_item_img).convert_alpha()
            window.blit(back_pack, (0, 600))
    
            if self.structure[self.case_y][self.case_x] == "N":
                self.back_pack += ("needle",)
            
            if self.structure[self.case_y][self.case_x] == "A":            
                self.back_pack += ("alcohol",)
     
            if self.structure[self.case_y][self.case_x] == "T":
                self.back_pack += ("toilet_tube",)

    Je voudrais blitter tous mes sprites en noir au lancement de mon labyrinthe, et ne dévoiler que le carré de sprites entourant mon personnage, et donc faire apparaître le labyrinthe uniquement au déplacement de mon personnage.

    pour mon personnage à une position (x,y), je voudrais simplement blitter avec les bonnes sprites les 9 cases de ce fameux carré. (la case où se trouve mon perso, ainsi que les 8 autour)

    Mais je ne parviens pas à trouver de solution propre. Pourriez_vous m'aider s'il vous plaît?

    Thony

    EDIT:

    Je dois pas faire comme il faut, en attendant vos précieuses lumières je suis en train d'essayer un truc du genre:

    si sprite += 1 == position perso:

        afficher sprite blitté par rapport à la valeur de ma map (le parcours de mon fichier texte "draw_file")

    sinon:

        afficher sprite blitté en "noir"

    mais je bloque au moment d'affecter une valeur à chaque sprite...

    En utilisant un dictionnaire? (je sens déjà venir la réponse ^^) mais je dois pas m'y prendre comme il faut

    J'ai une classe GameLoops qui est le programme général de jeu, une classe Labyrinthe qui génère le labyrinthe, une classe Personnage et quelques autres mais c'est au niveau de ces 3 là que je cherche à faire ma bidouille

    -
    Edité par py_Thony 22 janvier 2020 à 19:58:45

    • Partager sur Facebook
    • Partager sur Twitter

    Réussir à échouer, c'est tout de même réussir quelque chose!

    . .

    PYGAME - sprites blittés à l'approche du perso

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown