Voir la version complète : Algo Terrains Worms
CPPTryer
14/09/2005, 18h38
Salut tout le monde,
J'ai 2 questions qui me turlupinent...
J'ai cherché, mais j'ai pas trouvé :00000012:
Mais ptet que vous savez^^
Alors j'aimerai savoir si vous saviez comment c'est fait le système de destruction du terrain dans Worms en 2d. Un exemple quand je balance une grenade et qu'elle explose au sol, une partie du terrain disparait... vous savez comment on pourrait faire la même chose en C++/Opengl ? Enfin je n'arrive pas à savoir comment ont fait pour avoir une carte avec des collisions aussi "fines", comment faire pour que le bout d'herbe, je dois sauter pour passer dessus(par exemple).
Merci d'avance et @++++
Ya plusieurs truc, le plus con serait de le gérer comme une image 2d, c'est simple mais consomme de la mémoire innutilement. Tu fait des détection au pixels prêt normalement si tu as un worm, je te suggère de tester le pixel au centre en bas et le pixel au centre en haut de ton worm, pour les collisions. POur faire te collision, lis le pixel sur l'image, et s'il n'est par exemple pas égal à zero, c'est solide.
Une technique plus efficace serait de gérer ton terrain avec des tuiles comme les jeux rétro, mais en plus tu te crée un masque de destruction booleen, tu réduis ainsi la consommation de mémoire de beaucoup, et en plus ca te permet de faire des animation si tu as des tuiles. Quand le terrain est détruit tu met des partit de ton masque à 1. Quand tu fait le rendu du terrain, tu teste si le terrain est détuit avant d'afficher. Attention, ici il y a des optimisation a a faire si tu veux un peu de performance.
Voilà. Bonne chance.
worms 3d ou worms en 2d ?
Pour la 2d c'est géré au pixel mais je ne sais pas vraiment plus.
CPPTryer
14/09/2005, 19h45
Salut, merci, qu'appelles-tu "masque", un attribut de chaque tuile pour dire si elle est détruite ou pas ?
Et ce masque permettrait-il de grignotter seulement une partie d'une tuile ? J'avais pensé en rajoutant de la transparence sur certains endroits..., mais je sais pas du tout.
Bonne soirée
Edit : 2d en opengl :)
:00000015:
A mon avis voilà comment il faut s'y prendre
t'as une bombe lancée...boom
-tu redessines les tiles environnant en fonction de la position de l'explosion. En fait, tu copies sur l'image un disque, de centre "centre de la bombe" avec une couleur transparente à la place des pixels du sol en fait et tu crées ainsi quelques nouveaux tiles=> ceux dont l'un des quatre angles a une distance à l'explosion inférieure au rayon de l'explosion.
-tu détermines x1 et x2, les abscisses des extrémités du cratère(intersections du cercle explosion et de la droite du sol si il y en a), et sur cet intervalle, la fonction associée à l'abscisse du lemmings, qui renvoie sa hauteur, n'est plus celle du tiles(qui était une fonction affine pour des surfaces planes à la sonic) mais une fonction atypique dépendant du cercle(centrey-sin(acos(abscisse))).
hum mais je suis meme pas sur que worms se soit exactement comme lemmings...j'espere
- par contre tu rencontras des bugs pour les blocks de terre volant(y'en avait dans lemmings)
si tu veux je peux te faire un schéma, mais si t'aime pas la trigo abandonnes ma technique tout de suite, ça m'evitera du boulot : )
CPPTryer
14/09/2005, 20h56
Salut, heu oui un shéma me serait utile stp, merci d'avance:00000023:
ce lien a lair pas mal ( jai pas eu le courage de lire ^^ )
http://forums.gamemaker.nl/index.php?showtopic=44353
( et ya meme des shemas ;) hihi )
http://fdc001.perso.cegetel.net/Images/Lemmings.JPG
Si tu piges bien l'anglais réfères toi plutot à l'autre systeme, car je n'ai pas tester le miens. Et d'ailleurs je sais que le mieux ne gère pas certaine situation : un cratère dans un cratère. Si comprends mes schémas tu pourras le faire sans problème en cherchant un peu...mais bon.
Salut, merci, qu'appelles-tu "masque", un attribut de chaque tuile pour dire si elle est détruite ou pas ?
Le masque servirait à grignoter du terrain, en conservant l'orignal en mémoire. Se serait ridicule de faire disparaitre une tuile au complet par un attribut :D ca serait tout "blocky".
Avec l'idée apporté par FDC001 tu pourrais te creer un liste de tuiles masque, comme si chaque portions de ton terrains avait un canal alpha, soit, 0% ou 100% de transparence. (Tu pourrais même ajouter 8bit de transparence pour avoir de l'antialising sur tes bordures). Je m'excuse de la qualité, j'avais pas le temps de faire mieux alors voilà un exemple :
http://pixidream.iquebec.com/images/worm_idea.jpg
FDC001 ton ":00000015: " me laisse croire que t'a pas aimer ma solution, si j'étais toi je m'y pencherais ;). Elle a plusieurs avantages, et sont lot d'inconvénients aussi. Ta technique de tuile quoi que nettement meilleure que celle d'une grosse image est loin d'être parfaite non plus :P. Même si certain WormLike l'utilisent.
Lol pas du tout : ). Non c'est parce que j'ai fais que du dark basic avec dbpro...c'est beaucoup plus simple, mais je maitrise assez bien le langage, et je vois à peu près comment faire tout type de jeu. Alors comme c'est de l'opengl le smile traduisait...l'adaptation que j'ai du faire pour parler général et pas dark basic.(et si je me permet de répondre c'est parce que je suis sur que tout ce qui est faisable en dbpro est faisable en c++ avec un code ... un peu plus longs). Donc voilà, je n'ai jamais fait d'opengl si je peux donner un conseil à cpptryer c'est de suivre plutot tes conseils que les miens.
++
En fait avec ta technique pour savoir si le worms tombe ou pas, on regarde si dessous lui le pixel est noir ou blanc?
J'y ai un peu réfléchit et c'est vrai que ça pourrait éviter toute les complications/bug des fonctions
Et quand le worm avance on regarde si le prochain pixel noir devant lui est pas trop élevé sinon y'a collision et demi tour?...
A désolé alors j'ai vraiment mal interprété ton smiley alors :D. C'est correct, t'inquiète j'avais pas pris note négative.
J'ai pas science infuse :D, ton idée est très respectable, d'ailleurs utilisé par lemmings c'est vrai. Darkbasic ou Opengl ou C++, c'est tous équivalent côté capacité.
Bon, je vais répondre à ta question, exactement, le masque sert à 2 choses, bloquer le joueur au pixel près quand il y a collision et aussi, servir de masque d'affichage, ce qui est noir est pas dessiné.
L'avantage de cette technique c'est la mémoire, un masque booléen prend 1 bit par pixel plutot que 8, 16 ou 32bit... dépendant du mode d'affichage. OpenGL en plus gère bien les masque booléen avec le Stencil Buffer.
Le désavantage, c'est que tu peux pas construire du terrain, avec un arme par exemple qui fabrique de la terre.
Pourquoi tu pourrais pas construire de terrain ? il te suffit de mettre à jour ton masque et la texture de terrain ? :p
Tu peux aussi passer par un shader pour faire l'équivalent du stencil buffer dont parle nunuxxx mais du coup tu peux utiliser un stencil sur 2 ou 4 bits par exemple (tjours très ptit en mémoire) afin de faire de l'antialiasing à l'affichage, pour une destruction plus lisse (moins nette) du décor ;) (le test de collision reste un test booleen sur une valeur du masque).
Alexis.
En fait, tu peux reconstruire mais pas construire :) du nouveau.
Je connais pas les shaders dutout... c'est dans OpenGl 1.4 ça?
vBulletin® v.3.6.5, Copyright ©2000-2009, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org