L'idée, c'est que tu colles une couche d'abstraction entre tes sprites (persos, bombes, obstacles, ...) et le cœur du jeu, en créant plusieurs groupes, auxquels tu ajoutes ou retires tes sprites suivant leur état, leur nature... Un sprite peut appartenir à plusieurs groupes différents à la fois.
Dans le cas d'un bomberman, je pense que c'est probablement l'une des façons les plus propres pour gérer de multiples objets (affichage, mise à jour de l'état, etc...).
C'est un peu long et complexe à expliquer dans un simple post sur le forum (il faudrait facile un mini-tuto entier sur la question... c'est prévu, mais pas pour tout de suite), mais si tu fouilles un peu la doc de pygame, tu trouveras plusieurs tutos en anglais qui permettent de débroussailler ce problème.
Je ne m'en sors pas du tout avec la Classe <Sprit>. J'ai tanté de faire sans, mais ça ne marche pas d'une part, puis d'autre part, c'est trop lourd .
Impossible de créer une surface pour chaque bombe blité
Impossible d'utiliser la classe Sprit. (Trop peut de tuto à ce sujet et la doc ne m'aide pas beaucoup sur l'implémentation de cette classe)
Je ne m'en sors pas du tout avec la Classe <Sprit>. J'ai tanté de faire sans, mais ça ne marche pas d'une part, puis d'autre part, c'est trop lourd .
Impossible de créer une surface pour chaque bombe blité
Impossible d'utiliser la classe Sprit. (Trop peut de tuto à ce sujet et la doc ne m'aide pas beaucoup sur l'implémentation de cette classe)
Me suis-je attaqué à un projet vrément trop dur ?
Pourquoi impossible de créer une surface pour chaque bombe blité ?
Impossible de créer une surface pour chaque bombe blité
As-tu vraiment besoin de faire ça ?
En considérant une surface par image, tu peux blitter la même surface à plusieurs endroits différents : tu économises de la mémoire et du temps (copie de surfaces) de cette façon.
Citation : realmagma
Impossible d'utiliser la classe Sprit. (Trop peut de tuto à ce sujet et la doc ne m'aide pas beaucoup sur l'implémentation de cette classe)
Il faut du temps pour comprendre le fonctionnement (et l'intérêt) des sprites, on peut pas avoir un
tuto pour tout non plus hein (quoique là, a priori, il devrait bientôt y en avoir un...).
Citation : realmagma
Me suis-je attaqué à un projet vrément trop dur ?
Un Bomberman comme premier projet POO/Pygame, c'est vrai que c'est plutôt ambitieux. Ceci dit, t'as pas un chef ou un client derrière toi qui te fout la pression en te collant des délais : prend ton temps, essaye d'assimiler les notions peut-être en créant d'autres mini-jeux/mini-programmes avant de les utiliser dans ton Bomberman. Juste, ne laisse pas tomber.
Je viens de lire et de relire les tutoriels sur les sprites et j'aurais quelques questions:
Voici ce que j'en n'ai retenu:
<Spirte>:
Aide à la gestion des objets du jeu
Constituées de méthodes pour faciliter le travail avec la classe <Group>
Le sprite garde une trace du groupe auquel il appartient
Les considérer comme vivantes/valides quand elles sont dans un ou plusieurs groupes
Méthodes de la classe <Sprite>:
- add() : change les membres d'un objet de type Group
- remove(): change les membres d'un objet de type Group
- groups(): retourne une liste des groupes actuels contenant le sprite
- kill() : supprime le sprite de tous les groupes qui le contiennent
- alive() : retourne 'True' si le sprite est encore le membre d'un groupe
--------------------------------------------------------------------------- <Group>:
Conteneur pour les objets sprites (dessine les éléments quelles contiennent)
Passer un sprite ou une liste de sprites dans le constructeur __init__()
Méthode de la classe <Group>:
- add() :
- empty() : Supprime les sprites du groupe
- copy() : Copie les sprites
- has() : Verification si un sprites(ou liste) fait partie du groupe
- sprites(): Elle retourne un objet sur lequel il est possible de boucler pour avoir un accès
à chacun des sprites que le groupe contient.
- update() : Appel update() sur chaque sprite du groupe
- len() : Récupère le nbr de sprites dans un groupe
Opérateur 'truth' permet d'écrire 'if mygroup: Verifie si le groupe à des sprites ou non
Voici une liste des classes de type Group présentes dans le module sprite.
*-* Group:
C'est le groupe de type standard, sans supplément, qui est explicité ci-dessus.
La plupart des autres groupes sont dérivés de celui-ci, mais pas tous.
*-* GroupSingle:
Celui-ci fonctionne exactement comme la classe Group standard, mais il contient seulement
le sprite le plus récemment ajouté. Ainsi, lorsque vous ajoutez un sprite à ce groupe, il
oublie tout du précédent sprite qui était stocké. De cette manière, un groupe de ce type contient
toujours seulement un ou zéro sprites.
*-* RenderPlain:
C'est un type dérivé du type Group. Il possède une méthode draw() qui dessine tous les sprites
qu'il contient à l'écran (ou sur une surface quelconque). Pour ce faire, il nécessite que tous
les sprites qu'il contient possèdent les attributs image et rect. Il les utilise pour savoir
quoi bliter et où les bliter.
*-* RenderClear:
Ce type est dérivé du type RenderPlain, et ajoute la méthode clear(). Cette méthode va effacer
la position précédente de tous les sprites dessinés, en utilisant une image de fond pour les remplacer.
Elle est suffisamment élégante pour gérer les sprites supprimés et les effacer proprement de l'écran
lors de l'appel de la méthode clear().
*-* RenderUpdates:
C'est la cadillac des groupes de rendu. Il hérite de RenderClear, mais change la méthode draw() pour retourner
une liste de Rects de Pygame, qui représente toutes les zones de l'écran qui ont été modifiées.
Question:
- Dois-je supprimer les classes <Perso> et <Bombe> et les remplacer par des classes <Group> (comme GroupSingle, renderPlain ....) ?
- Est-ce ça l'idée ? (Je veux dire par là, d'éviter de créer des classes à tout va)
Je vous remercie d'avance.
EDIT: Bien entendu ce ne sont pas les seuls méthodes: Voir ici
L'idée, c'est de gérer le comportement de tes bombes et de tes persos en utilisant ces classes.
En gros, c'est que tes persos et tes bombes dérivent d'une classe de Sprite, de manière à ce que tu puisses les utiliser dans des groupes.
× 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.