[Moteur de jeu] Comment ca marche ?

Répondre
Partager Rechercher
Citation :
Publié par Titan.
C'est GCC qui peut balancer 40 lignes incompréhensible pour juste un symbole non déclarer dans une classe templété.
Oui. Clang, lui fait beaucoup plus dans le concis, mais je ne pense pas que les messages de GCC, bien que massifs, soient vraiment plus compliqués à comprendre.
Les goûts et les couleurs je suppose.
Citation :
Publié par 'Az
...
Le C++ ne demande pas de gestion manuel de la mémoire. Lorsqu'on se sert de pointeurs c'est dans des objets donc c'est assez facile de gérer la mémoire.

Le C++ a effectivement différent concept comme tout les langages complexes, il me semble que Java aussi a des concepts propres.
La C++ étant assez libre on peut faire des choses étranges. Mais ce sont des possibilités, la plupart du temps tu ne t'en sert pas.

Les vrais erreurs imbuvables sont les erreurs de mémoire pour ça on a un débugueur. En général, l'erreur se repère vite. Parfois, on met du temps car le problème est complexe. Ca demande de réfléchir, surtout si y a des pointeurs partout (ce qui est une mauvaise idée).
Citation :
Publié par Xotraz
Le C++ ne demande pas de gestion manuel de la mémoire. Lorsqu'on se sert de pointeurs c'est dans des objets donc c'est assez facile de gérer la mémoire.
On est bien d'accord qu'on ne peut pas déclarer une variable et espérer qu'elle survive hors de son scope si on ne fait pas un new avant ?

On est aussi d'accord que tout new sans son delete est un memory leak ?

Même si cette gestion est simple, elle est manuelle (aka elle n'est pas gérée automatiquement). La seule "facilité", c'est que new fait une allocation de mémoire de la taille nécessaire pour contenir l'objet. C'est une surcouche intelligente de malloc. Tout comme delete est une surcouche de free.
Et on est bien d'accord que le garbage collector de java c'est d'la merde qui provoque des pertes de performances difficilement contrôlables?
Sinon, dans le domaine du jeu vidéo, les pointeurs sont utilisés quasiment partout.
Bah justement, y a une gestion de la mémoire comme tout les langages si la variable sort du {} elle meurt.
Avec les objets, on peut parfaitement gérer l'information sans pointeur.

Si tu veut gérer la mémoire toi même tu peut, pour qu'un objet pointe sur un autre par exemple.
Mais de là à dire qu'il n'y a pas de gestion automatique, non c'est faire croire qu'en C++ on est obligé de gérer tout avec des pointeurs.
Alors qu'on peut faire comme tout les autres langages.

EDIT : Ah vous parlez du ramasse miette comme gestion automatique... Le peu de Python que j'ai vu ça ne change rien. Enfin si vous voulez c'est automatique.

Dernière modification par Xotraz ; 31/07/2014 à 15h16.
Keeth, essaye le C++ mais essaye autre chose pour pouvoir par expérience comparer ce que tu peux accomplir en dev de jeux...

Partez dans de longs débats, il va se noyer dans votre discussion,
Keeth si tu veux voir ce que la gestion de la mémoire est en C++, fais tes tests avec un petit jeu basique et essaye différents outils de dev...
Citation :
Publié par Senader
Oui. Clang, lui fait beaucoup plus dans le concis, mais je ne pense pas que les messages de GCC, bien que massifs, soient vraiment plus compliqués à comprendre.
Les goûts et les couleurs je suppose.
Je pense que tu n'a pas saisi de quoi Az (et maintenant moi) parlions, pas d'une tonne de warning (plus ou moins utile), mais des "plantages" du compilateur incapable d'identifier l'erreur et t'obligeant à relire ton code ligne par ligne sans avoir le moindre indice sur quoi chercher.
Il faut une certaine habitude (et donc avoir déjà passé plusieurs demi-journée à chercher), pour savoir qu'elles types d'erreurs sont susceptible de générer ces "plantages de compilo".
Citation :
Publié par Xotraz
Bah justement, y a une gestion de la mémoire comme tout les langages si la variable sort du {} elle meurt.
Renseigne toi sur les notions de heap/stack ça brule les yeux de lire ça...
Citation :
Publié par Senader
On est bien d'accord qu'on ne peut pas déclarer une variable et espérer qu'elle survive hors de son scope si on ne fait pas un new avant ?

On est aussi d'accord que tout new sans son delete est un memory leak ?

Même si cette gestion est simple, elle est manuelle (aka elle n'est pas gérée automatiquement). La seule "facilité", c'est que new fait une allocation de mémoire de la taille nécessaire pour contenir l'objet. C'est une surcouche intelligente de malloc. Tout comme delete est une surcouche de free.
std::shared_ptr

Faut se tenir à la page hein (ça permet d'autres memory leak si on fait des abomination avec shared_ptr<A> qui a pour donné membre un shared_ptr<B> qui a pour donnée membre le premier shared_ptr<A>, mais bon ça c'est un peu pareil pour tous les langages me semble t'il, et c'est pour ça qu'on std:weak_ptr).
Citation :
Publié par Titan.
Renseigne toi sur les notions de heap/stack ça brule les yeux de lire ça...
Tu peut m'expliquer parce que ce que j'ai dis correspond à l'allocation sur la pile non ?

@Dessus : Ah oui y a ça aussi, quand on fais les choses bien.
Citation :
Publié par Titan.
Je pense que tu n'a pas saisi de quoi Az (et maintenant moi) parlions, pas d'une tonne de warning (plus ou moins utile), mais des "plantages" du compilateur incapable d'identifier l'erreur et t'obligeant à relire ton code ligne par ligne sans avoir le moindre indice sur quoi chercher.
Il faut une certaine habitude (et donc avoir déjà passé plusieurs demi-journée à chercher), pour savoir qu'elles types d'erreurs sont susceptible de générer ces "plantages de compilo".
Wut ? Je parle des erreurs de compilation, pas des différents flags de compilation (qui sont présent de base avec Clang si je ne me trompe).
Quand tu merde dans ton code avec des templates, ton compilateur ne te dit pas "jé pa kompri lol", il te dit justement avec BEAUCOUP de détails la connerie que tu as fait (ou plutôt ce que tu essaie de faire). Clang réduit ce détail dans les erreurs de compilation et est bien plus concis.

(Il y a BEAUCOUP plus de différences entre GCC et Clang que l'ajout de base de certains flags.)

@Assurancetourix : Je n'avais pas connaissance des pointeurs intelligents, my bad. Etant encore dans mes études, je me fais insulter (et gratifier d'un -42 :'() quand j'utilise C++11 dans mes projets.
Ça reste beaucoup plus lourd que des "naked pointers" et en effet, ça a l'air assez amusant de s'en sortir avec l'alternance shared/weak

Petite question : c'est vraiment une bonne pratique de les utiliser (en milieu professionnel par exemple) ? (pas quand on fait attention à la vitesse d'exécution visiblement, mais mis à part ça ?)
Nom des dious, on se croirait dans un forum de programmation à disserter sur la gestion de la mémoire...

Bon Keelth j'ai mieux pour toi apprends à écrire une bibliothèque de fonction (en faisant la gestion de mémoire le profiling des fonctions en C++) pour pouvoir les utiliser dans des scripts de haut niveau comme celui qui est développé par les dev de Unity3D et là tu vas être gagnant grave, si tu veux on voit ça ensemble c'est un truc qui me branche tu connais bien l'anglais?

http://docs.unity3d.com/ScriptReference/
ça s’appelle le Boo...
y a moyen d'écrire des lib pour le Boo par exemple pour gérer l'AI, je suis sur que ca peut le faire et tu as tous les outils pour le développer, guider par Unity3D, et tu peux les écrire en C++, à vérifier
De plus tu as accès au sources de Unity3d, en version pro malheureusement

Tiens voilà un lien qui peut t'aider:
http://docs.unity3d.com/Manual/Plugins.html

tu peux écrire des plugin en C/C++ pour unity3D genre gestion d'AI ça doit être cool à faire!

Tiens d'ailleurs voilà plus:
http://docs.unity3d.com/Manual/Nativ...Interface.html
tu peux télécharger des exemples:
http://docs.unity3d.com/uploads/Exam...nExample45.zip

C'est ca qui est bien avec unity3D tu as beaucoup de ressources et d'informations, tuto etc...

Bon courage!
N'hésite pas à me contacter je vais creuser cette piste, ça m’intéresse grave, j'y avais pas pensé
Citation :
Publié par Senader
Petite question : c'est vraiment une bonne pratique de les utiliser (en milieu professionnel par exemple) ? (pas quand on fait attention à la vitesse d'exécution visiblement, mais mis à part ça ?)
Bah oui. La lib Qt que je connais assez bien l'utilise pas mal en interne par exemple (enfin ils ont fait leurs propres classes vu qu'à l'époque où ils en ont eu besoin le c++ que tout le monde utilisait ne l'avait pas en standard, mais c'est le même principe).
Ne connaissant pas le C++, votre conversation a au moins le mérite de montrer clairement que c'est un langage qu'il vaut mieux éviter pour débuter dans la programmation si on ne veut pas s'arracher les cheveux
Citation :
Publié par Toro
Ne connaissant pas le C++, votre conversation a au moins le mérite de montrer clairement que c'est un langage qu'il vaut mieux éviter pour débuter dans la programmation si on ne veut pas s'arracher les cheveux
Bof, je sais pas vraiment. C'est juste que le skillcap est plus haut, mais ça empêche pas de commencer simple
Citation :
Publié par Toro
Ne connaissant pas le C++, votre conversation a au moins le mérite de montrer clairement que c'est un langage qu'il vaut mieux éviter pour débuter dans la programmation si on ne veut pas s'arracher les cheveux
Disons qu'il vaut mieux éviter de faire que du C++, et de visiter d'autres manières de faire, d'autres langages etc...

SI tu veux faire de la programmation C++ un boulot, c'est un bon plan! Ca dépend de l'optique

Dernière modification par elmonki ; 31/07/2014 à 18h06.
@Az:
Je me cite:
Citation :
Publié par Olxinos
C'est pas bien compliqué [...] de comprendre des rudiments de syntaxe et de programmer quelque chose qui fonctionne à peu près [...]. Bon, ensuite, programmer proprement et faire du bon code (qui plante pas, bien découpé, et sans grosses erreurs de conception/d'algorithme), c'est autre chose [...].
Ce que tu dis n'est pas complètement faux (surtout pour les erreurs avec les classes templatées, mais bon, ça vient aussi du compilateur plus que du langage), mais aucun des points que tu cites ne sont des "passages obligés" (à part la compilation, et très franchement quand tu link rien, ou une ou deux libs, c'est franchement pas la mer à boire).
Par exemple, la gestion manuelle de la mémoire, tu peux effectivement le faire toi même, comme tu peux avoir des objets qui s'en occupent pour toi (et bien entendu, un débutant va généralement commencer par déclarer des variables "classiques" sur la pile où tu n'as pas à te préoccuper de mémoire), de même, rien n'empêche d'éviter certains concepts que l'on ne connaît ou ne maîtrise pas.
Après, l'ordre des déclarations, je vois pas trop ce que tu veux dire. Si tu parles des fonctions/classes et dépendances cycliques, de toute façon, c'est une pratique commune de déclarer les prototypes des fonctions et les noms de classes plus haut, à moins que tu fasses référence à la représentation mémoire des objets (mais ça, ça relève vraiment du détail, surtout pour un débutant).

En revanche, maîtriser de A à Z le C++, oui, c'est compliqué. (Edit: no pun intended)
Mais rien qu'en connaissant les structures de contrôle de base (if/while/for/switch) les opérateurs arithmétiques (+, -, *, %), les types float, int, char, la notion de tableau, de pointeur (hors pointeur de fonction/méthode/void* et sans arithmétique de pointeur) et de fonction (sans ellipse), tu dois déjà pouvoir programmer à peu près n'importe quoi (j'entends de façon optimale, ou "quasi"-optimale) et sans faire du brainfuck (là ça ressemble plus à un fragment du C d'ailleurs).
Je répète des fois que, c'est faisable et pas spécialement compliqué tant que tu n'optimises pas, mais c'est long, surtout pour recoder (souvent moins bien) des choses qui ont sûrement déjà été faites ailleurs.

@Senader:
Un bon code, c'est un code bien découpé, qui marche, ne plante pas, et se comprend facilement. Les pointeurs intelligents ont été conçus pour permettre au programmeur de se concentrer sur des tâches plus importantes que farcir ses programmes de "if(ptr)" et "try{}catch{free/delete ...}" qui polluent le code (tout comme les langages de plus haut niveau avec un garbage collector et autres luxes du genre), et devraient être utilisés autant que possible si ça te permet de simplifier ton code.
D'ailleurs c'est exactement pour cette raison qu'objectivement, il vaut mieux préférer des outils de haut niveau spécialisés lorsqu'on veut réaliser un programme (principe que je suis rarement, mais c'est une mauvaise habitude de ma part).
Après, tu optimises si besoin, mais je doute de toute façon que le gros des pertes viennent de ces pointeurs ("Early optimization is the root of much evil.").

Dernière modification par Olxinos ; 31/07/2014 à 20h18.
Bon, vu l'avalanche de posts, je me permet de venir repointer le bout de mon nez. Je pensais que mon topic de noob allait mourir de lui même....

Je dois vous avouer que je suis assez surpris:
- de voir que je ne comprend pas tout sans pour autant être largué
- de constater que beaucoup veulent à tout prix me décourager de faire du C++
- et surtout d'être envahi par une incontrôlable sentiment de sympathie vis a vis de Neirdan ( juste pour tes propos sur le garbage collector )

Je me régale de vos posts et je pense ne pas être le seul . Surtout ne changez rien. Ce thread est une vraie mine d'informations.

GJ fellas !

Cliquez ce bouton ou survolez le contenu pour afficher le spoiler
Nota Bene: J'aimerais vraiment me mettre à python toussa.. mais je suis pas du style à courir plusieurs lièvres à la fois: j'ai des bases en C++ et vous voulez que je passe à autre chose.. Vous voulez ma mort ou quoi ?
Non, reste sur du c++, les principaux render engine open source sont en C++ (après, y'a des wrappers pour les faibles). De même pour les librairies son (je pense à OpenAL) et réseau.
Ce qui est également bien, c'est l'interopérabilité avec du C, qui permet d'avoir accès à certaines libs bas niveau, comme Sqlite.

Olxinos a bien résumé: le C++ est facile à aborder, difficile à maîtriser et possède un large éventail de possibilités.

Si tu tiens vraiment à faire du python il reste panda3D, le moteur principal de Disney, notamment utilisé sur le défunt pirates des caraïbes online: https://www.panda3d.org/
Et pour java, il y a Jmonkey qui est pas mal, ceux de Chaos l'utilisent https://forums.jeuxonline.info/showthread.php?t=1215470
@Olxinos : Bah merci pour le tip, j'essaierai de m'y mettre (je suis encore beaucoup habitué au C et aux "naked pointers")

@Keeth : Comme l'a bien résumé Neirdan, le C++ est "easy to learn, hard to master". Pouvoir utiliser du code C et avoir accès à un très grand nombre de libs & co. rend le C++ vraiment intéressant. C'est ce qui te permettra le plus de progresser tout en ayant des outils pour avancer.
Citation :
Publié par Keeth

Cliquez ce bouton ou survolez le contenu pour afficher le spoiler
Nota Bene: J'aimerais vraiment me mettre à python toussa.. mais je suis pas du style à courir plusieurs lièvres à la fois: j'ai des bases en C++ et vous voulez que je passe à autre chose.. Vous voulez ma mort ou quoi ?
Ben si tu écris un module python en C++ pour Panda3D engine c'est cool mdr

pthon c gentil à coté, C++ tu vas suer à grosses gouttes pour écrire un module tu comprends?
Citation :
Publié par elmonki
pthon c gentil à coté, C++ tu vas suer à grosses gouttes pour écrire un module tu comprends?
Arrête donc d'essayer de le décourager, c'est idiot. Il dit qu'il voudrait faire du C++, tu lui dit qu'il y a des alternatives et c'est mare. Pas la peine de lui dire dix fois qu'il fait le mauvais choix, surtout que ce n'est pas forcément vrai.
au contraire je pense qu'il fait le bon choix mdr
c'est juste pour éviter qu'il reste bloquer dans cette optique se décourage et laisse tomber le C++ sans avoir gouté à autre chose, faut laisser une porte ouverte au reste
c'est ce que j'ai essayé de lui faire comprendre au départ, si tu veux faire du C++ ton mêtier ok go! Si tu veux coder des jeux, faut sortir un peu du C++
Citation :
Si tu veux coder des jeux, faut sortir un peu du C++
Oh que non, si tu veut coder des jeux un peu complexe tu sautes sur le C++, à la limite le Java.
Inutile d'essayer d'apprendre 4 langage en même temps, alors que dès le premier on peut apprendre d'autre plus facilement.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés