je crée ce topic pour en discuter, ce qui évitera de parler dans les commentaires du tuto. cf le règlement
Citation : règlement
Nous vous rappelons que cet espace est réservé aux commentaires à propos des tutoriels, veillez donc à ne pas poser vos questions dans cette section.
Pour cela, rendez-vous sur le forum ! Merci.
EDIT : première modification effectuée : refactoring :
Les variables ont maintenant un nom plus explicite.
J'ai juste quelques remarques
Pour faire un accès au pixels il faut locker la surface mais tu ne le fait pas
En effet, mais comme je charge les images dont le but est d'être analysées pixel/pixel en RAM, le lock n'est pas nécessaire Il prend son sens que si l'image est en VRAM.
En effet, si l'image est en RAM, le lock n'a pas d'effet. Peut etre devrais je quand meme le mettre, mais disons que c'est facultatif dans ce cas !
Citation : Pouet_forever
Et ici ya une petite erreur de copier/coller je pense :
En effet J'ai remodfié cela, ainsi que fait du refactoring des noms de variables ce matin, ça a été validé il y a peu.
Citation : realmagma
Ecxelent tuto. Tout le monde l'attendait. Il faudrait aussi insérer un systeme de saut plus "Expliqué/Simple" que le tuto existant.
Houra
Je présenterai un système de saut, en présentant quelques règles de physique, et en donnant une fonction "magique" pour ceux qui n'auront pas les notions de physique nécessaires
Je présenterai un système de saut, en présentant quelques règles de physique, et en donnant une fonction "magique" pour ceux qui n'auront pas les notions de physique nécessaires
Justement à propos de ça., je me suis intéressée au saut en 2D il n'y a pas longtemps. J'ai tout d'abord voulu utiliser la méthode des paraboles mais on m'a justement dit que c'était trop de calculs pour un petit jeu de plateforme. Du coup, on m'a présenté une méthode qui n'est pas réaliste mais qui permet d'imiter un saut. (cf. ce post) Est ce cette méthode que tu comptes présenter ou alors reprendre le tutoriel déjà existant avec méthode des paraboles et méthode avec la loi de Newton ?
- la position x,y du bonhomme
- sa vitesse instantannée vx,vy
C'est a dire qu'a n'importe quel moment, on saura ou il est (fondamental) et a quelle vitesse et dans quelle direction il est en train de bouger (un vecteur).
Cela ne sera pas fondamental pour l'utilisateur de lire ce vecteur, mais ça le sera pour le calcul.
En effet, je fournirai une fonction "Evolue" qui prend :
- position x,y,
- vitesse instantannée vx,vy,
- force appliquée (souvent que la gravité)
- "dt" temps passé depuis la derniere frame
Et cette fonction calculera le nouveau x,y, et le nouveau vx,vy avec les formules de Newton. (pas le moteur physique, la formule mathématique directe)
Quand on sautera, la fonction mettra juste a jour vx et vy vers le haut, et l'évolution calculera toute seule, pour chaque frame, comment le bonhomme évoluera.
Je gererai également facilement de la meme maniere la possibilité de controler son saut.
Pour l'utilisateur, il suffira d'appeler une fonction "Saut", puis ensuite, a chaque frame, d'appeler "Evolue" : ça se fera assez simplement.
En effet, si l'image est en RAM, le lock n'a pas d'effet. Peut etre devrais je quand meme le mettre, mais disons que c'est facultatif dans ce cas !
Tout à fait, ce n'est que la mémoire vidéo, qui a besoin d'être "lockée", pour un accès direct.
Pour une surface en mémoire conventionnelle, on en a pas besoin(C'est même logique...).
On le fait, souvent un peu pour les mêmes raisons que l'utilisation de la fonction SDL_Blit plutôt que SDL_UpdateRects... Ca marche dans tous les cas, et si jamais on a des essais à faire en passant en mémoire vidéo, ça fonctionne encore...
@Pouet_Forever : Pour essayer, enlève les locks des plasmas que tu a créé, tu verras, cà fonctionne encore.
Mais en effet, il serait mieux de mettre lock, un peu comme je pense qu'il est mieux de mettre flip pour du simple buffering.
Bon, je ne vais pas le mettre, car il faudrait que j'explique directement, dans le chapitre 1, ce qu'est le lock je vais épargner un peu mes lecteurs jusqu'au paragraphe 1.3.
Pour remonter encore plus loin dans le passé (je crois que tu as débuté sur des 16 bits?), les premiers ordinateurs pour jouer (les 8 bits de chez Atari, Commodore, etc...) utilisaient comme dans ton tuto des mondes en mode texte, mais on décrétait que le tile avait une dimension de 8x8, ce qui correspond aux dimensions d'un caractère de l'époque... Tu vois venir la suite, on associait à chaque monde un jeu de caractères et on dessinait vraiment le monde en mode texte!
Ah j'ai quand même connu la NES 8 bits, mon fidèle Atari ST et l'Amstrad CPC de mon cousin sur lequel j'ai tapé mes premières lignes de code
Mais en effet, le tile mapping en ASCII me rappelle de vieeeeux souvenirs, mais j'ai peu joué à ce genre de jeux. Mais tiens, on pourra imaginer un pac-man en mode texte par exemple
C'est une obligation d'utiliser le char pour faire le tableau 2D ? Je le fais en C++ et j'aimerais ne pas utiliser std::ostringstream.
Sinon, je l'ai fait avec des int et tout fonctionne mais c'est juste pour savoir si il y a une convention qui dit que les tableaux 2D doivent être obligatoirement construit avec des char.
C'est surtout pour la mémoire qu'il a utilisé des char
Tu peux très bien utiliser des int ou autre
Citation : Fvirtman
Pour faire mon monde de Mario, j'ai besoin du tileset (une petite image en soi), et du tableau.
Si je considère que je n'aurai pas plus de 256 tiles différents (je tape très large, et c'est souvent le cas), je peux compter 1 octet par case de mon tableau.
Avec mon tableau de 13*15, j'ai moins de 200 octets .... C'est très petit.
C'est en effet uniquement une histoire de mémoire. Mais si cela te gene, tu peux mettre des int. Ta machine a assez de mémoire pour le supporter sans aucun soucis
EDIT : si tu le fais en C++, tu peux si tu le souhaites utiliser de std::vector<std::vector<char> >
Cependant, les tableaux normaux compileront tout aussi bien.
EDIT : si tu le fais en C++, tu peux si tu le souhaites utiliser de std::vector<std::vector<char> >
Cependant, les tableaux normaux compileront tout aussi bien.
Je vais justement réorganiser mon code pour pouvoir faire un tableau de Tile (une classe que je vais créer).
Le code que je propose, même en C, est assez "orienté objet" de toute manière.
Il te suffira de remplacer les structures par des classes, et les fonctions qui s'appuient dessus par des méthodes.
Concretement, la fonction Chargermap pourra etre le constructeur de la classe map, Liberer le destructeur.
Théo/007 > A terme, ce sera en effet un éditeur de niveau qu'il faudra faire.
Bravo pour ce tutoriel, c'est très intéressant. On va enfin pouvoir faire des jeux de plateformes très facilement avec la SDL .
Et ça va être très utile pour d'autres types de moteurs. Je pense qu'avec peu de changements, on pourrait utilisant ton tutoriel pour la création d'un moteur en pseudo "3D iso" (sans le système de case en forme de losange et un moteur en 2D).
Donc, encore merci pour ce tutoriel vraiment intéressant .
En effet, la 3D iso, c'est uniquement au niveau de l'affichage que le rendu est "de biais". La manipulation des structures est grossièrement la même.
Le but est d'enfermer au maximum la difficulté dans des sous fichiers, de façon a ce que ce soit simple pour l'utilisateur.
Par exemple, le dernier exemple appelle des fonctions "ChargerMap" "AfficherMap" "LibererMap" qui sont "relativement" complexes en interne, mais simples à appeler.
Il viendra par exemple prochainement une fonction facile qui gèrera le scrolling toute seul : il suffira de lui dire quel "objet" on veut suivre (un personnage), et la caméra le suivra, rendu le scrolling complètement automatique.
0 : Sol
1 : Vide (ciel)
3 : à vous de choisir moi je dirai un mur
4 : à vous de choisir moi je dirai un mur
5 : Tuyau (côté gauche bas)
6 : Tuyau (côté droit bas)
7 : Tuyau (côté gauche haut)
8 : Tuyau (côté droit haut)
9 : Boîte à bonus (non utilisé)
- : Boîte à bonus (utilisé)
- : Buisson (côté gauche)
- : Buisson (centre)
- : Buisson (côté droit)
- : Eau
- : Eau
- : Barre du drapeau de fin du niveau
- : Morceau du drapeau
- : Morceau du drapeau
- : Morceau du drapeau
- : Champignon bonus
- : Ennemi
C'est une image en GIF (pour info).
Mais pour le numéro mettre 10 ça vaudrait un 1 et un 0 non ?
Etudiant-ingénieur en Mécatronique à l'INSA de Strasbourg (BAC+5)
Alors avec l'astuce que j'utilise (ou tu dessines l'image avec paint), tu n'as plus le probleme des nombres (au dela de 9), donc ton set passera parfaitement.
Par contre, ton dernier tile est animé : ça, ça ne passera pas. Il faudra découper les diverses animations et en faire plusieurs tiles.
A noter que l'idée sera de bien séparer le tileset (les briques) des charset (les persos, les monstres)
Je l'attendais avec impatience Merci encore. La partie qui m'intéresserait pour la suite du tuto serait comment passer derrière un arbre par exemple (une notion de profondeur), comme tu en as parlé. Je viens de me rendre compte que j'utilise pleins de méthodes du tuto que j'ai créé pour mon p'tit RPG, au moins je suis pas totalement à côté de la plaque .
Alors je ne sais pas exactement comment RPG Maker gere cela, mais je ferai du multicouche :
- pour gérer des arbres devant par exemple
- pour gérer un fond qui défile moins vite que l'avant plan.
Mince je n'avais pas vu ce tuto, ni ton autre sur les évennements. Il a l'air bien complet et est très précis, beaucoup d'exemple et d'indication bravo. Un détail tout de même que je sens venir et dont tu devrais prévenir tes lecteurs, c'est de bien utiliser des images .bmp pour sauvegarder leur "cartes" car ils risquent souvent d'enregistrer en .jpg et donc se retrouver face au problème de la compression d'image.
C'est un peu domage, j'ai commencé un très gros tuto sur comment gérer tout un projet, les méthodes à trouver etc pour faire un gros jeu de plateforme avec scrolling et tout le bataclan. Bref ça sera un peu redondant mais je suis beaucoup plus succint.
Note: je regarderais plus précisément ton tuto sur les évents, car avec que méthode similaire, je n'ai toujours qu'un seul évennement clavier produit et donc une seule touche activé à chaque fois.
En effet, je préciserai qu'il est important d'utiliser un format d'image sans perte (BMP, voir PNG, mais surtout éviter JPG)
Si tu fais un tuto, j'irai le lire Je ne pense pas que ce soit mauvais d'en avoir plusieurs qui traitent des parties en commun, ça permet d'avoir plusieurs approches.
En effet, ce que je présente est mon approche. Bien sur, dans mes années passées, je me suis bien pété les dents a essayer d'autres trucs qui ont échoué, ou que j'ai pu simplifier, discuter avec des gens sur le sujet, et ce que je propose est, pour le moment, ce que je préfère
Il est à noter aussi que Mathéo a déja présenté un peu le tilemapping avec Mario Sokoban. J'ai quand même fait mon tuto pour aller plus loin dans ce domaine la.
× 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.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Etudiant-ingénieur en Mécatronique à l'INSA de Strasbourg (BAC+5)
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Etudiant-ingénieur en Mécatronique à l'INSA de Strasbourg (BAC+5)
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Etudiant-ingénieur en Mécatronique à l'INSA de Strasbourg (BAC+5)
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html