METEROID IV // JEU SOUS OPENGL (DEVC++)

neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006 - 19 juin 2004 à 07:30
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007 - 3 août 2005 à 21:31
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/23814-meteroid-iv-jeu-sous-opengl-devc

cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
3 août 2005 à 21:31
Comment vous faites pour faire un image en format tga ??? Moi il veut pas ouvrir avec paint lol
greg le grand Messages postés 9 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 20 décembre 2005
16 juil. 2005 à 09:51
Moi j'arrive pas à l'ouvrir y'a l'ecran blance et rien
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
1 juil. 2005 à 21:01
Il reste plus qu'a jarter Glut et se cera bon ...
kenjimax Messages postés 82 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 10 août 2007
26 août 2004 à 14:46
C'etait juste pour l'exemple :D
D'habitude je fais tout, tout seul ! Avec glut ;)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
23 août 2004 à 13:05
Ben à mon avis comme bcp de gens kenji a repris un code de base pas de lui, pour ouvrir une fenêtre et gérer les évènements.
cs_Seiken Messages postés 14 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 24 avril 2005
22 août 2004 à 16:43
"/* OpenGL animation code goes here */"
"/* shutdown OpenGL */"

Hum, pourquoi tu met les commentaires en anglais ?
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
28 juin 2004 à 10:25
vive la suisse nous a finit depui 2 semaine et 1 jour :D
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
27 juin 2004 à 23:33
Euh...ben je sais plus si j'étais irrité ou non, c pas grave ;)
Toi aussi t'as l'oral de français :'(
Bonne chance...
kenjimax Messages postés 82 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 10 août 2007
27 juin 2004 à 14:44
Bien sur que je te donne ma benediction :D

J'espere que je ne t'ai pas irrité funto ton post parait ecri par quelqu'un de légèrement exaspéré... excuse moi, si tu etais comme cela a cause de moi...

Merci à tous en tout cas !
Je peux pas m'y remettre tout de suite parce que j'ai l'oral du bac de francais mardi...

Merci Albert aussi de t'être intéressé à ma source !
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
23 juin 2004 à 09:37
oui enfet j'ai ajouté beacoup de truc maintenant : tier a plusieur reprise
- ajout d un menu
- ajout de nivo(1) avec enemi et bosse final

si tu me donne ta benediction kenji je post dèsque j'ai finitde coder les vie

voila ++
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
23 juin 2004 à 00:23
Je te l'ai dit plus haut : certaines de tes textures TGA ne marchent pas parce que le loader de Nate Miller n'accepte que des textures non compressées.
J'ai écris plus haut aussi que j'avais écrit un loader qui supportait les textures TGA compressées, c'est pas pour rien...

Tu nous dis que ça marche pas mais tu ne nous montre pas le code.
Tu pourrais faire comme ça dans un 1er temps :

// En variables globales (oui, je sais, c'est pas propre, mais bon
// de toutes façons vu comment est le programme...)
GLuint g_ID_tir_rouge;
// IDs des autres textures aussi...

// Dans init() , après un #include "TGALoader.h" (mon loader de TGA) :
// (glGenTextures() est appelé dans mon loader en interne).
TGALoader tga_loader;
tga_loader.LoadOpenGLTexture("TEX_TIR_ROUGE.tga", &g_ID_tir_rouge);

// Dans Display(), pour le bind :
glBindTexture(GL_TEXTURE_2D, g_ID_tir_rouge);


Voilà, si tu fais comme ça normalement ça devrait marcher.

PS : Y'a albert0 qui a en prjet d'améliorer ta source, on en a parlé ensemble et j'ai rajouté quelques trucs, enfin moi je dis ça comme ça...;)
kenjimax Messages postés 82 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 10 août 2007
22 juin 2004 à 15:45
.....cela ne marche pas...

Je desespere un peu, j'ai l'impression d'avoir fait tout ce que vous aviez di et pourtant j'ai toujours le meme probleme avec loadTGA...et je n'arrive pas à trouver de source qui utilise des textures TGA avec le loader de nate miller, si quelqu'un avait ca sous la main ?
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
22 juin 2004 à 15:09
Ouais voila c'est ça la fonction :)
Sur ce j'espere t'avoir aidé, bonne prog!
kenjimax Messages postés 82 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 10 août 2007
22 juin 2004 à 14:26
Merci beaucoup !

La fonction pour obtenir l'ID je la connais, c'est glGenTextures(nbr_de texture, référence)

Je vais essayer comme ca, si ca fonctionne merci bcp ! sinon, merci quand meme...
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
22 juin 2004 à 13:39
puts("J'ecris un programme alors que j'ai le BAC dans 1 semaine...\n\n"); // cingléééééééééé !!!!!!!!

loooooooooool
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
22 juin 2004 à 13:30
Bah je viens de te la donner... :D Je t'ai pris de vitesse mdr
kenjimax Messages postés 82 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 10 août 2007
22 juin 2004 à 13:21
Par exemple, dans la source que je viens de mettre, et bien c'est la texture "tir_rouge" qui est chargée, alors que ce n'est pas elle que je bind. La texture courante est toujours la derniere chargée avec loadTGA. Est ce que qqln a une explication ?
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
22 juin 2004 à 13:21
Oui c'est normal, en fait effectivement tu ne t'y prends pas bien pour charger les textures, heureusement que tu pointes là dessus j'avais pas fait attention

Voila ta déclaration:
enum
{
TEX_UNIVERS=1,
TEX_VAISSEAU_JOUEUR=1,
TEX_TIR_ROUGE=1
};

et là --> Pb! En fait opengl attribue à chaque texture un Id, mais il ne le fait pas automatiquement, c'est toi dans ton appel à loadTGA ( ou plutot dans les appels à opengl qui y sont inclus ) qui le définis. Or Toutes tes textures ont un id de 1! Donc à chaque fois il remplace la texture d'id 1 par la dernière chargée!

Pour corriger -> Met plutot quelque chose du genre

enum
{
TEX_UNIVERS=1,
TEX_VAISSEAU_JOUEUR=2,
TEX_TIR_ROUGE=3
};

Et là t'auras plus de probleme... En fait c'est moche de donner toi meme les id des textures, il existe une fonction opengl faite pour te délivrer un id libre à coup sur, mais je m'en rappelle plus, funto le sait surement et j'ai la flemme de chercher :) mais l'idée est la meme --> Donner TJS des Id différents!
kenjimax Messages postés 82 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 10 août 2007
22 juin 2004 à 12:16
lol Funto, c'est vrai que c'est un peu de sa faute, mais cela m'aide à y voir plus clair. Sinon, pour le chargement des textures, le probleme c'est que meme en mettant une identité specifique a chaque texture, la texture courante (celle qui est utilisé lorsque je fais glBind...) est toujours la derniere chargée, je dois pas m'y prendre correctement.

En tout cas, merci Wett pour ton commentaire.
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
21 juin 2004 à 15:11
Huh, les textures sont chargées à chaque appel à Display()?
J'avais pas vu....Faut JAMAIS faire ça lol

Sinon pour l'utilisation de GLUT, le code dans les fichiers .h et la programmation non orientée objet, mea culpa, tout est de ma faute Wett... C'est en fait comme ça que j'expliquais dans mes tutoriaux sur http://www.amk-project.ft.st...j'ai honte, tu peux me taper, vas-y te gêne pas...
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
21 juin 2004 à 15:07
Huh, les textures sont chargées à chaque appel à Display()?
J'avais pas vu....Faut JAMAIS faire ça lol

Sinon pour l'utilisation de GLUT, le code dans les fichiers .h et la programmation non orientée objet, mea culpa, tout est de ma faute Wett... C'est en fait comme ça que j'expliquais dans mes tutoriaux sur http://www.amk-project.ft.st...j'ai honte, tu peux me taper, vas-y te gêne pas...
cs_Wett Messages postés 104 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 12 juin 2005
21 juin 2004 à 02:03
Sympatoche comme programme ! Dommage que tu l'arretes, franchement y'a moyen d'en faire qlq chose de marrant
!
Juste 2-3 trucs :
Selon ma *courte* experience, l'utilisation de glut si elle simplifie grandement certaines choses comme l'initialisation de la fenetre de maniere portable etc, ben... Enfin moi j'aime pas :) Et j'ai jamais reussi à faire un timer correct avec puisque le débat en est là.
Encore un truc de chipotage : on ne balance pas de code dans un .h! uniquement les prototypes/déclarations, les definitions (le vrai code quoi) étant toujours dans un .cpp...
Pour ce qui est de l'optimisation... Quelques conseils tres simples:
Je vois que tu charges les textures pendant l'affichage... Hop hop hop on prend son courage à 2 mains, on fait une procédure d'initialisation qui s'occupe de charger tout ce qui est nécessaire une bonne fois pour toute, on garde les id des textures dans un coin (ici la programmation objet t'aiderai mais bon on complique pas trop et puis je viens de voir que tu t'en sors déja pour la position du vaisseau, ben tu nous fait pareil pour les id des textures) et on les utilise comme tu le fais! Simplement on ne charge jamais en pleine boucle, si opengl n'etait pas super intelligent bah ton HDD tournerait à bloc comme un fou, tu imagines charger 20Ko 60 fois par seconde... Ca commence à faire! ;) Et je me demande si c'est pas pour ça que comme tu dis dans un post précédent ton programme finis par ramer, ramer des qu'il y a des textures...
Derniere chose de re-chipoteur ( donc en fait si tu suis bien, les "qlq conseils d'optimisation" se sont transformés en 1 seul conseil :) Indente ton code, ça simplifie la lecture et c'est pas plus mal de prendre les bonnes habitudes dès le début :D

Voila désolé si je chipote tout le temps (et encore je me retiens ;) mais faut pas m'en vouloir je dis ça dans ton interet :)
Sur ce, merci pour cette source et bonne prog !
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
19 juin 2004 à 19:25
Pour le timer il te faut 2 variable double et la fonction timeGetTime de je sais plus quel fichier..(windows.h pitetre)
tu trouve donc ta nouvelle position en multipliant le temps écoulé depuis le dernier passage: si ce n'est pas assez clair dis le je rééxpliquerai bien !
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
19 juin 2004 à 17:20
Ouais, comme OpenGL quoi, mais en non portable :D
Bon, on va essayer d'éviter le débat ultra-classique et méga-trollesque "DirectX ou OpenGL?"...

kenjimax >> je vois pas pourquoi t'arrêtes, enfin bon...
Pour ce qui est des timers, en fait la méthode que tu utilises (et qui vient de moi, j'ai honte...) est mauvaise; plutôt que de limiter l'affichage à X FPS, les jeux actuels calculent le temps d'affichage de chaque frame et font les "actions" (déplacement d'un perso...etc) en fonction du temps passé à dessiner la frame. C'est pour ça qu'un jeu apparaît saccadé sur une vieille carte graphique, mais peut quand même rester relativement jouable.
Je sais pas si je suis vraiment clair...

Bon, ensuite c'est sûr que l'idée de la texture de l'univers était mauvaise lol.
Après, pour ce qui est d'accélérer le rendu (mais ça se sent pas vraiment dans un prog en 2D comme les tiens...), y'a les display lists et les vertex arrays.
Cherche un peu sur le net, j'ai ni le temps ni l'envie de l'expliquer là :p
Bonne prog
++
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
19 juin 2004 à 17:12
DirectX rien de mieux ca rame pas , tu fais ce que tu veux avec :)
kenjimax Messages postés 82 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 10 août 2007
19 juin 2004 à 16:54
Bon... On peut maintenant lancer 3 "boules" en meme temps et leur vitesse est reglable...

Cependant, aux vues des modifications necessaires au programme, j'ai decidé (c'est pas la premiere fois d'ailleur) d'arreter (je vous l'avais bien dis).
Mais, je vais faire autre chose bien sur ! Le meme style de jeu mais orienté objet a la maniere de meteroid III mais en opengl.

J'aurai deux trois questions à poser a des "specialistes" (funto : "Moi, Moi, Moi, je sais !!! je sais moi !!!") en ce qui concerne la rapidité d'execution des jeux : a chaque fois que je fais un programme avec des textures, ca rame. Alors, je met un timer et je limite a 40 images par seconde par exemple, ca marche un temps, mais au fur et a mesure de la complexification du programme, ca ralenti, ralenti, ralenti.

Donc, j'aimerai avoir quelques conseil pour accelerer l'execution des jeux, exemple :
- Il ne faut pas que tu utilises trop de textures, par exemple ton univers tu aurais du le faire avec "glBegin(GL_POINTS)".
- Utilise un autre loader de texture plus rapide.
- documente toi sur les procedes d'optimisation du code.
- etc...

Merci d'avance !
kenjimax Messages postés 82 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 10 août 2007
19 juin 2004 à 14:27
Ahhh oui ! excuse moi funto....jamais deux sans trois !

MERCI FUNTO !

Ca y est, t'es content ? :D

OK, pour vos remarques, je m'y met tout de suite.
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
19 juin 2004 à 13:21
De rien de rien...c pas la peine de l'écrire 2 fois et en majuscules qd même lol
Plusieurs remarques :
-pas de timer, faudra en mettre un (jeu trop lent chez moi)
-plutôt que de tirer un seul projectile, ce qui nous empêche de re-tirer pendant que le seul projectile existant et en train d'avancer, il faudrait utiliser plusieurs projectiles à la fois, genre avec une classe Projectile utiliser un vector.
-pour les textures TGA, tu utilises le loader de Nate Miller donc les images ne peuvent pas être du TGA compressé; avec un programme comme GIMP, tu pourrais enregistrer tes images au format TGA compressé et ensuite les charger avec un autre loader (genre le mien, sur CppFrance ;))
-à parler des textures, c'e qui n'est pas utile et qui bouffe de la place sur la carte graphique : la texture de l'univers. Pour dessiner des points blancs sur fond noir tu pourrais qd même le faire par toi-même lol, en utilisant la fonction rand() pour que les étoiles soient éparpillées au hasard par exemple.
-enfin, chez moi le vaisseau ne suit pas exactement la souris (il est un peu en retard) mais je vois pas comment l'arranger.

Bon, ben pour finir faudrait rajouter des ennemis bien sûr (et du son ;))
Bonne prog
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
19 juin 2004 à 10:37
Le vaisseau pour du paint il est pas mal :b
Je le trouve bien le scrolling... Tu voudrais pas plutôt en faire un différentiel, avec plusieurs plans qui défilent à des vitesses différentes ? Ce serait génial...
Voilà, sinon bonne continuation
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
19 juin 2004 à 09:59
...Et sincèrement les ennemis c'est pas trop ce qu'il y a de plus difficile :) le plus dur c'est de faier un gameplay intéressant :)
neo_00110010101 Messages postés 360 Date d'inscription samedi 27 septembre 2003 Statut Membre Dernière intervention 30 mai 2006
19 juin 2004 à 07:30
il faudrait que lorsqu'on laisse cliquer sur la souris, le vaisseau shoot sans relache tu vois ?
Sinon j'ai remarqué qu'il tire dès qu'on clique mais aussi dès qu'on relache. C'est original ^^
A part ça le scrolling est bien fait mais manque plus que des ennemis comme tu dis !
Rejoignez-nous