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
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.
Réussir à échouer, c'est tout de même réussir quelque chose!
. .