Envoyé par
moechofe
Si j'ai bien compris : les élements correspondent aux graphiques comme les briques qui te permettent de déssiner le niveau.
Les sprites, eux sont censés pouvoir se déplacer ou posséder une animation.
Tu peux donc imaginer que la classe sprite est une fille de la classe element.
Et tu devra les traiter différents à l'affichage.
Donc je résume, la classe Sprite contient l'image, et la taille de celui ci...
Genre l'objet Brique, aura comme attribut une SDL_Image le representant donc, pret à être afficher, et sa taille.
Ensuite, pour chaque brique sur la map, correspondra à un Sprite par pointeur, donc ici, pointera sur l'objet Brique instance de Sprite, avec en plus ses coordonnées, afin de ne pas avoir à charger l'image de la brique en memoire, pour chaque brique, ca prendrait trop de ressources pour rien. Voilà.
Donc ce que j'avais pensé, c'est ne pas avoir de class Element, mais que tous les coordonnées de toutes les briques ou autres, soient intégrées à la classe Level, qui fera directement le lien avec le sprite Brique. Mais voilà le problème, comment stocker toutes les coordonnées?
Envoyé par
moechofe
J'ai remarqué que dans ton éditeur, il est possible de placer les briques au pixels près. C'est donc incompatible avec le système de tiles.
En effet, et prenons par exemple une tortue qui se deplace...
Je ne vais pas la faire déplacer d'un tile à chaque pas, il me faut donc obligatoirement traiter avec des coordonnées en pixels.
Et encore une fois, il existe des astuces pour alléger le bordel.
Si ton niveau possède des scrollings, tu décodes tes informations au fur à a mesure que le personnage se déplaces. Imaginons que ton écran affiche 640x512 pixels (au pif), la taille rélle du tableau devrait etre de 640+640+64 x 512+512+64. Cela permettra au scrolling d'etre fluide, pendant que le moteur décodes les informations.
Autre technique intéressante, en travaillant en binaire : 0 = franchissable, 1 = non franchissable.
En stockant toutes les informations dans une liste, et avec un algorithme adapté, il est très facile de connaitre l'état franchissable d'un pixel.
Le Scrolling, je m'en occuperai plus tard, tout d'abord j'aimerai en arriver au meme point que le programme en C, mais en C++ et avoir déjà un bon moteur.
Ensuite concernant le "franchissable ou pas", ca sera indiqué dans Element je pense, car il y a aussi le "semi-franchissable" ( on peut passer à traver par en dessous, mais pas par au-dessus )
Envoyé par
killpatate
Salut
Je suis pas programmeur donc perso je pourrait pas t'aider, mais en tout cas c'est plutôt pas mal comme 1er jeu en C, niveau code je peut pas dire mais c'est déjà fluide et bien gérer, par contre utiliser une image pour le menu c'est pas géniale je trouve ; dans mes projets généralement j'opte pour une solution qui permet de traduire facilement le soft (enfin je le dit à ma team
).
Voila sinon vivement le jeu en C++ avec des combats
lol, merci beaucoup, ca encourage beaucoup.
Mais justement, c'etait pas vraiment fluide, car en fait, la méthode que j'utilisais, c'est que pour chaque brique, je chargeais l'image dans la memoire...
Donc quand on editait le niveau et qu'on mettait des briques de partout, ca commencait à laguer.
Envoyé par
moechofe
C'est vrai, c'est un très bon premier projet. C'est la raison pour laquelle je réponds à tes questions.
Et si vraiment tu es intéressé par la programmation, je t'invite à explorer les autres langages assez rapidement. Tu te rendras compte que les techniques de programmation sont plus importantes que les lignes de codes elles-mêmes.
Je suis en DUT Info, et justement, on est en train d'apprendre la theorie de la POO. On voit aussi d'autres langages, mais cet approfondissement envers le C++ et les jeux vidéo, ce n'est que par occupation, et passion ( en effet, on travaille que sur des applications consoles... )
Donc pour en revenir à mon point actuel...
Je suis bloqué pour gérer le level et les differents elements.
Donc voici mon idée...
Je garde cette liaison entre Sprite, qui contiendra l'image ou l'animation, et Element qui contiendra les coordonnées, et informations sur celui ci ( franchissable... ).
Jusqu'à maintenant, la liaison entre Sprite et Element se fesait par pointeur, mais je pense que les codes numeriques seraient plus appropriés ( 1 pour brique... ), donc ca m'a fait penser à un Enum, qui contiendra tous les elements du jeu...
Ce qui aurait été plus simple, c'est de créer et charger tous les sprites dans un tableau... où Sprites[BRIQUE] pointerait lui sur le sprite brique.
et dans la classe Element, on aurait comme attribut :
et pour l'afficher :
ecran::affiche(Sprites[BRIQUE], m_x, m_y);
( le tableau Sprites[] serait donc une variable globale. )
Au fait, quand on crée une classe, avec des fonctions static comme ici ecran::affiche(), on peut l'appeler de n'importe où dans le programme, ca ne pose pas de problème?
Bon maintenant, se pose la question du Level...
Je suis en train d'y reflechir, comment stocker tous les élements qui la constituent, ainsi que leur coordonnées...
Bon la classe contiendrait comme attribut un tableau de pointeurs sur Element.
Mais ensuite comment sauvegarder un level dans un fichier qui contiendrait donc les elements et leur position, et donc qu'on pourrait retranscrire dans le programme en lisant le fichier...
Partager