MOTEUR 2D AVEC SDL

MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 - 26 juin 2004 à 17:05
o0Leo0o Messages postés 116 Date d'inscription samedi 19 juin 2004 Statut Membre Dernière intervention 20 août 2005 - 11 août 2004 à 14:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24024-moteur-2d-avec-sdl

o0Leo0o Messages postés 116 Date d'inscription samedi 19 juin 2004 Statut Membre Dernière intervention 20 août 2005
11 août 2004 à 14:56
C'était ma carte graphique...

En tout cas, chouette truc, je vais m'en servir pour m'entrainer aux classes.
o0Leo0o Messages postés 116 Date d'inscription samedi 19 juin 2004 Statut Membre Dernière intervention 20 août 2005
29 juin 2004 à 18:20
J'ai essayé avec ME, pas de problème, bravo, c'est bien chouette en tout cas, je vais m'en servir pour m'entrainer avec les class.

Donc, soit le problème vient de ma carte graphique, soit j'ai des paramètres couleur mal réglé :(.
Tijee Messages postés 11 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 juillet 2004
29 juin 2004 à 12:53
Oulah j'avoue que la je peux pas t'aider !!! Ca vient peut-être de XP mais ça n'est qu'une hypothèse en fait je n'en sais rien du tout !
o0Leo0o Messages postés 116 Date d'inscription samedi 19 juin 2004 Statut Membre Dernière intervention 20 août 2005
29 juin 2004 à 12:10
En fait, je comprend pas vraiment, mais j'ai jamais d'affichage graphique quand je compile avec SDL.
o0Leo0o Messages postés 116 Date d'inscription samedi 19 juin 2004 Statut Membre Dernière intervention 20 août 2005
29 juin 2004 à 11:23
J'ai un petit problème avec:
je suis sous XP avec Dev C++, je compile, le lance, ça vire en plein écran, tout est noir et j'ai un retour sur le bureau pour finir.
Tijee Messages postés 11 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 juillet 2004
28 juin 2004 à 13:01
Arf merci Funto j'y avais vraiment pas pensé ! Tu m'ote une énorme épine du pied, thanks !!! :)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
28 juin 2004 à 12:44
Tijee >> ben pour des constantes comme la résolution de l'écran ou la taille des Tiles tu pourrais utiliser une classe Jeu, dont tous les membres seraient en static :
class Jeu
{
public:
static int Main();
static const int largeur_fenetre, hauteur_fenetre, taille_cote_tile;
};

const int Jeu::largeur_fenetre=640;
const int Jeu::hauteur_fenetre=480;
const int Jeu::taille_cote_tile=20;

int main()
{
return Jeu::Main();
}

Et tu rends cette classe Jeu visible depuis chacune de tes classes, c'est une façon plus propre d'utiliser des variables globales ;)
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:14
Arf..... dsl pour ttes ces réponses identique....

*Shirox le boulet*
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:13
Et bien, je ne sais que dire, c'est exactement la base de ce qe je cherche à faire :)

donc maintenant je m'interroge sur le comment tu as faist en étudiant ta source, et surtout par quel mode d'apprentissage tu es passés comme je te l'ai dit par message privé !

J'ai hate de voir la prochaine version de ton moteur !!!
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:12
Et bien, je ne sais que dire, c'est exactement la base de ce qe je cherche à faire :)

donc maintenant je m'interroge sur le comment tu as faist en étudiant ta source, et surtout par quel mode d'apprentissage tu es passés comme je te l'ai dit par message privé !

J'ai hate de voir la prochaine version de ton moteur !!!
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:12
Et bien, je ne sais que dire, c'est exactement la base de ce qe je cherche à faire :)

donc maintenant je m'interroge sur le comment tu as faist en étudiant ta source, et surtout par quel mode d'apprentissage tu es passés comme je te l'ai dit par message privé !

J'ai hate de voir la prochaine version de ton moteur !!!
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:12
Et bien, je ne sais que dire, c'est exactement la base de ce qe je cherche à faire :)

donc maintenant je m'interroge sur le comment tu as faist en étudiant ta source, et surtout par quel mode d'apprentissage tu es passés comme je te l'ai dit par message privé !

J'ai hate de voir la prochaine version de ton moteur !!!
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:09
Et bien, je ne sais que dire, c'est exactement la base de ce qe je cherche à faire :)

donc maintenant je m'interroge sur le comment tu as faist en étudiant ta source, et surtout par quel mode d'apprentissage tu es passés comme je te l'ai dit par message privé !

J'ai hate de voir la prochaine version de ton moteur !!!
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:09
Et bien, je ne sais que dire, c'est exactement la base de ce qe je cherche à faire :)

donc maintenant je m'interroge sur le comment tu as faist en étudiant ta source, et surtout par quel mode d'apprentissage tu es passés comme je te l'ai dit par message privé !

J'ai hate de voir la prochaine version de ton moteur !!!
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:09
Et bien, je ne sais que dire, c'est exactement la base de ce qe je cherche à faire :)

donc maintenant je m'interroge sur le comment tu as faist en étudiant ta source, et surtout par quel mode d'apprentissage tu es passés comme je te l'ai dit par message privé !

J'ai hate de voir la prochaine version de ton moteur !!!
Shirox Messages postés 11 Date d'inscription mardi 24 juin 2003 Statut Membre Dernière intervention 27 juin 2004
27 juin 2004 à 23:08
Et bien, je ne sais que dire, c'est exactement la base de ce qe je cherche à faire :)

donc maintenant je m'interroge sur le comment tu as faist en étudiant ta source, et surtout par quel mode d'apprentissage tu es passés comme je te l'ai dit par message privé !

J'ai hate de voir la prochaine version de ton moteur !!!
Tijee Messages postés 11 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 juillet 2004
27 juin 2004 à 17:14
Voila j'ai commencé et j'avoue que malgré tes conseils j'ai du mal ! J'ai préféré commencer avec un seul calque mais je me trouve confronté à un problème : je dois souvent, surtout pour les fonctions Dessiner(...), passer énormément d'arguments pour que la classe soit vraiment modulable, par exemple la résolution de l'écran, la largeur d'un Tile en pixels,... et je me retrouve avec des classes pas très maniable. Comment y remédier ???
Tijee Messages postés 11 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 juillet 2004
27 juin 2004 à 14:58
Kirua je sais pas comment te remercier, tu m'offre sur un plateau ce que je cherche depuis si longtemps ! Je m'y essaie de suite et je vous tiens au courant !!! Merci encore !!!
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
27 juin 2004 à 12:50
Achoum, les personnages énormes sur les maps c'est un grand classique des RPG, laisse-nous pleurer sur le passé :) si tu me crois pas, regarde même FF9, quand tu te ballades sur la carte, tu es plus grand que les villes ne sont hautes, et prtant c'est de la 3D.

La seule chose qui pourrait te bloquer pr les classes, c'est probablement de savoir QUOI encapsuler, alors voilà ce que je te propose:

class Tile;
class Calque;
class Carte;

la classe Tile représente un carré texturé (un élément du décor quoi). il doit y avoir une méthode: Dessiner(int x, int y), et il doit y avoir des propriétés pour savoir quelle texture il contient. Les paramètres (x,y) de Dessiner(...) seront passés par la classe Calque.

la classe Calque représente un carré de Largeur * Hauteur tiles. On en fait une classe, parce que tu auras plusieurs calques (pour pouvoir mettre un arbre par dessus du sable, ou de la terre, ou de l'herbe...). Comme propriétés: un tableau bidimensionnel (taille dynamique! new[]/delete[]) de Tile, une méthode Dessiner() qui va appeler les méthodes Dessiner() de tous les Tile qui sont à l'écran (ça tu dois le savoir en fonction de la position de la "caméra" (qui détermine ce qui est affiché à l'écran) en leur passant en paramètre les coordonnées (x,y) du coin supérieur gauche (par exemple) du Tile en question.

la classe Carte contient un tableau de quelques Calque (on les dessine par transparence les uns au dessus des autres). Ce tableau peut être de taille dynamique (pas compliqué) ou de taille fixe. Avec la taille fixe (qui est un peu restrictive évidemment), tu ne perds pas bcp de place, puisque si les derniers ne sont pas utilisés, tu n'alloueras pas de mémoire pour les Largeur*Hauteur Tiles de ces calques là. Il doit y avoir une méthode Dessiner() qui appelle les méthodes Dessiner() des calques (utilisés), une méthode Charger() qui charge une carte depuis un fichier (c'est ici qu'on va donc d'abord libérer la mémoire de l'objet, et ensuite réallouer de la mémoire pour la nouvelle carte, et on lit et stocke toutes les infos depuis le fichier vers les calques, et vers les tiles des calques).

Dans cette classe Carte, tu auras bien sûr des méthodes pour la gestion de la caméra (CentrerSur(x,y), ...) et un tableau bidimensionnel (de nouveau, Largeur*Hauteur, le nombre de tile par calque) de booléens: bool **Traversable. Comme ceci, tu pourras facilement déterminer si tu peux marcher sur telle ou telle case, ou non. Ne mets pas la propriété bool Traversable dans la classe Tile, puisque tu auras plusieurs calques, ce serait une information redondante.

Surtout: n'oublie pas les delete[] dans les destructeur!!

Evidemment, tu peux choisir de faire plus simple (et plus rapide!) et donc n'utiliser qu'un seul calque, auquel cas toutes les méthodes de Calque sont transposées vers Carte, Traversable devient une propriété des Tile, et c'est Carte qui contient le tableau de Tile. L'inconvénient: tu devras dessiner les décors sur plusieurs fonds à chaque fois. Càd que si tu veux pvr mettre un tonneau sur du sable et sur de la terre, tu ne pourras pas juste entourer le tonneau de transparent et le poser sur un calque de terre en dessous de lui, mais tu seras contraint à le dessiner sur du sable et sur de la terre (= deux tiles à dessiner, et c'est un petit cas).

j'espère que ça t'aiguille un peu. je peux t'assurer en tout cas que coder un moteur non-orienté objet, je pense que c'est de la folie. tout doit êre modulable, sinon tu vas te retrouver avec un tas de variables globales, beuuuuurk. à défaut, utilise des namespace pr éviter les globales justement, mais la POO, c'est ce qu'il y a de plus beau ;)
Achoum Messages postés 39 Date d'inscription mercredi 17 avril 2002 Statut Membre Dernière intervention 2 juillet 2005
27 juin 2004 à 10:18
Pourquoi le personnage à la taille d'un arbre ???
Tijee Messages postés 11 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 22 juillet 2004
26 juin 2004 à 19:21
Ben j'ai essayé tout à l'heure mais j'ai un peu de mal ! Mais je promet de m'y remettre !!! ;)
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
26 juin 2004 à 17:05
Fallait coder ca avec des classes la ua moins ca aurait été intéressant pour toi la j'ose meme pas regarder le code !! Allez refais nuos ca en classe tu verra ca te ferra du bien ^^
Rejoignez-nous