Tu devrais peut-être jetter un coup d'oeil à ce post
Sinon il parait étrange de donner des précisions sur la valeur dans un enum class (le typer avec sf::Uint16 et l'indexer à 0) quand le but de l'enum class est de renforcer le typage de l'enum pour éviter les traitements utilisant la valeur sous-jacente. Pourquoi as-tu eu besoin de les renseigner ?
3 petites remarques :
- enlève la virgule à la fin de la dernière valeur de l'enum, le compilateur le gère mais ce n'est pas la syntaxe originale
- préfère l'anglais dans le code, typiquement à cause des mots comme "épéïste" qui ont des caractère spéciaux interdits. là ça va mais des fois ça peut devenir vraiment moche
- l'include de <cstdlib> ne présage rien de bon, pourquoi en as tu besoin ?
Dream on, Dream on, Dream until your dream comes true
Dans ce cas précis je ne sais pas, mais il n'y a rien de bizarre à affecter des valeurs dans l'enum class. On peut vouloir le check du compilo et manipuler les valeurs sous jacentes (moyennant un static_cast ou une classe pour faire du bitmask à partir de l'enum class). Par exemple l'abstraction C++ de Vulkan en fait une utilisation intensive.
J'ai pas été catégorique parce qu'il y a peut-être des utilisations que je ne vois pas, mais si j'utilise les valeurs sous-jacentes de mon enum, pourquoi je voudrais que le compilo m'engeule quand je le transtype implicitement ? les valeurs ont été choisies, le transtypage doit pouvoir se faire naturellement. Du coup quand j'affecte des valeurs, pour reprendre l'exemple, pour faire des flags, j'utilise des enums simple.
Du coup j'étais un peu curieux, j'ai jeté un rapide coup d'oeil à vulkan (donc je suis peut-être passé à côté), j'ai l'impression que c'est surtout des associations pour faciliter l'interface à la lib écrite en C, ça me parait être une bonne raison effectivement, mais c'est à cause du binding, il n'y aura pas de traitement qui utilise la valeur dans la partie C++ de Vulkan.
Dream on, Dream on, Dream until your dream comes true
En fait, je veux faire un RPG avec la SFML et je voudrais faire un système de classes(mage, guerrier, invocateur etc...), l'enum servait juste à structurer le code, ou plutôt à utiliser le nom de la classe(mage, guerrier , ...) plutôt qu'un chiffre car il y a un risque qu'on ne sache plus quel classe appartient à quelle valeur, j'aurais pu utiliser les string mais je préfère les nombres entiers.
Merci pour vos messages, c'est sympa.
Comme je fais un rpg j'ai besoin d'un tuto pas mal pour apprendre à faire des dessins en pixels(personnages, décors ou autres choses comme des monstres), si quelqu'un en connait un ce serait sympa qu'il me le montre.Même si ça n'a rien à voir avec le sujet du topic, désolé.Ne fermez pas le topic svp!
PS: en plus je suis gentil !
- Edité par AymericSt 12 novembre 2019 à 20:49:34
La programmation, c'est l'art d'exprimer sa créativité !
L'orienté objet ne va pas très bien avec les RPG ni les jeux en général. Exemple simple :
une classe cheval
une classe oiseau
Comment faire un « cheval - oiseau » ? Certains vont penser à l'héritage multiple, c'est crade et inadapté. Ton enum est simple mais elle va vite te limiter dans tes possibilités.
Je te conseille d'utiliser un pattern ECS ou chaque personnage de ton jeu ne sera pas une classe précise mais un ensemble de compositions formant un tout. Le but est de constituer des petites parties sémantiques à une entité afin d'en former un tout complex et évolutif.
Avec ceci, on peut imaginer faire une entité en lui ajoutant des composants comme :
vol (l'entité peut voler)
invisibilité
magie (l'entité peut utiliser de la magie)
git is great because Linus did it, mercurial is better because he didn't.
Je n'ai fait que quelques tests, je ne l'ai pas mis réellement en situation, mais je trouve la lib entt, qui implémente l'ECS, très sexy
Pour le dessin, j'aime bien le logiciel krita, mais vu que je ne suis pas un artiste, je me sers plus de ressources du net (ici ou là), au mieux tu trouves ce que tu cherches, au pire ça sers de placeholder jusqu'à que tu aies quelque chose de plus abouti dans ton concept du jeu pour que tu puisse enfin te consacrer à la DA.
Dream on, Dream on, Dream until your dream comes true
Merci pour le conseil sur l'ECS ! Le problème c'est que mon ide : code::blocks n'est pas mis à jour en c++17, je n'ai pas Cmake ni Doxygen qui sont indispensables à entt. Désolé d'en demander trop mais j'aimerai que qelqu'un m'explique comment faire pour avoir c++17, Cmake v.3.2 et Doxygen v.1.8.(Et aussi entt parce que je ne sais pas quels fichiers installer sur github).ça fait beaucoup, si on ne m'aide pas je serai malheureusement obligé de continuer avec mes méthodes actuelles.
Et désolé je ne cherche pas de logiciel de dessin, je recherche un tuto dessin pixel si quelqu'un en connait un.
Je sais bien que je demande vraiment beaucoup de choses et j'en suis désolé(vraiment).
- Edité par AymericSt 13 novembre 2019 à 19:59:12
La programmation, c'est l'art d'exprimer sa créativité !
Tu n'as pas besoin de CMake car entt c'est un seul et unique en-tête. Il y a juste à le mettre dans le répertoire de ton projet. Pour le C++17, met à jour ton compilateur ou passe à un vrai IDE moderne et installe CMake.
git is great because Linus did it, mercurial is better because he didn't.
CMake est un moteur de production, qui permet de paramétrer notamment la chaine de compilation dans un projet C++
Docygen est un outil de documentation, il lit le code et les annotation formatées et les mets en forme dans un document, un page web par exemple
Ces outils ne sont pas indispensable à entt, c'est juste si tu veux extraire la documentation t'utilise doxygen et dans ses programmes de tests le développeur a utilisé CMake donc si tu veux les rejouer sans les reconfigurer, tu utilise CMake.
Pour les avoir t'as juste à aller sur leurs site respectifs
Je ne crois pas que Code::Blocks ait une intégration de CMake, par contre CMake peut générer un fichier de projet Code::Blocks
Par contre le C++17 est effectivement requis, il faut mettre à jour le compilateur (ce qu'on t'as déjà conseillé au début du post)
Mais donc tu cherches un tuto de quel logiciel ?
Dream on, Dream on, Dream until your dream comes true
Comment met on a jour code::blocks en c++17 ?Si et seulement si c'est impossible quel compilateur me conseillez vous ?
Et le tuto que je cherche c'est juste un tuto dessin pixel avec n'importe quel logiciel de dessin, c'est pour apprendre à bien faire ses personnages, monstres ou décors.
- Edité par AymericSt 14 novembre 2019 à 20:13:23
La programmation, c'est l'art d'exprimer sa créativité !
Code::Blocks n'est pas un compilateur. Généralement il embarque MinGW, et le principe est donc juste d'installer une version à jour de MinGW et de le filer à manger à Code::Blocks.
Ah oui désolé, je le savais mais j'ai dit n'importe quoi car je pensais que vous comprendriez quand même.
Je reformule donc ma question : où pouvons nous trouver mingW version c++17(si possible en 32 bits).
Sur la forge de MinGW-w64, directement (il faut savoir que MinGW-w64 a complètement remplacé le projet MinGW -- sans -w64 -- car il était impossible d'ajouter, en l'état, le support du 64 bits au projet d'origine) ;).
Si tu regarde bien, il y a une ligne "MinGW-w64 online installer". C'est le plus facile à utiliser, car, une fois que tu l'as téléchargé, il va te permettre de choisir selon les différentes versions disponibles.
Choisi de préférence la version la plus récente (8.1.0), dans la "saveur" qui t'intéresse
Juste une petite question: pourquoi tiens tu absolument à ce que ce soit un compilateur 32 bits? Cela fait bien quinze ans que tous les PC vendus présentent une architecture 64 bits, et, sauf erreur de ma part, windows est disponible en version 64 bits au moins depuis la version Vista!!!
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
c'est parce que je n'étais pas sur d'avoir la bonne version de mon ide pour supporter le 64bits
J'ai réussi à installer mingw sur mon ide, j'ai réussi à compiler mon programme après avoir changé les "toolchains executables" dans settings->compiler...->toolchains executables de mon ide mais je ne sais pas comment inclure la bibliothèque standard dans mon ide, pourrai tu éclairer ma lanterne ?
- Edité par AymericSt 15 novembre 2019 à 20:37:26
La programmation, c'est l'art d'exprimer sa créativité !
c'est parce que je n'étais pas sur d'avoir la bonne version de mon ide pour supporter le 64bits
Attention, un IDE, tu dois le comparer à un éditeur de texte évolué, dans le sens où il fournit "tout ce qu'il faut" (du moins, en théorie) pour pouvoir gérer ton projet, à savoir:
un éditeur de texte
de quoi fournir la configuration de ton projet (indiquer les fichiers, s'il faut créer une bibliothèque ou une application, indiquer les options à transmettre aux différents outils, ...)
de quoi invoquer et manipuler aisément les autres outils, à savoir:
le compilateur,
l'éditeur de liens,
le créateur d'archive
le débugger
de quoi "faire le lien" entre les différents outils (ex: quand tu as une erreur de compilation, ce qui te permet de retrouver la ligne du fichier qui pose problème rien qu'en cliquant sur l'erreur)
de quoi représenter la sortie de certains outils (comme le débuggeur) sous une forme lisible et compréhensible.
Il ne fait donc que te faciliter la vie en automatisant ce que tu pourrais parfaitement faire en ligne de commande (surtout depuis que CMake existe pour configurer les projets); et, de manière générale, si programme (comme le compilateur ou le débuggeur) peut tourner sur ta machine, l'EDI est capable de l'utiliser
AymericS1 a écrit:
j'ai réussi à compiler mon programme
Et il n'y a pas eu d'erreurs, que ce soit de compilation ou d'édition de liens ?
Cela indique sans l'ombre d'un doute que la configuration donnée à ton IDE était la bonne
AymericS1 a écrit:
je ne sais pas comment inclure la bibliothèque standard dans mon ide, pourrai tu éclairer ma lanterne ?
Si tu as bien configuré ton IDE pour utiliser g++ pour compiler ton code C++, tu n'as rien à faire: sa configuration par défaut est prévue pour que la bibliothèque standard soit automatiquement utilisée (en fournissant "par défaut" le chemin d'accès vers les fichiers d'en-tête et vers l'endroit où se trouve les différentes bibliothèques, ainsi qu'en indiquant à l'éditeur de liens qu'il doit utiliser libstdc++ par défaut).
C'est si tu essaye d'utiliser gcc que tu risques d'avoir un problème, car ce n'est qu'un "front end" (comprend: un outil "de facade", adapté à la compilation de plusieurs langages), qui ne connait aucun des paramètres spécifiques qui doivent être utilisés pour les différents langages (et donc, pour C++). Et, du coup, il faut les transmettre de manière explicites
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
J'ai quand même un problème au niveau de la bibliothèque standard, car je ne peux pas l'utiliser, j'ai des erreurs de type "undefined reference to std::cout".
Désolé d'avoir encore besoin d'aide mais c'est bientôt fini.
Voici les settings de mon compilateur et du debugger:
Dans compiler flag j'ai coché : have g++ follow the coming c++1z(aka c++17) ISO language standard.
Dans toolchains executables:
c compiler: i686-w64-mingw32-gcc.exe
c++ compiler: i686-w64-mingw32-g++.exe
linker for dynamic libs: i686-w64-mingw32-gcc-8.1.0.exe
linker for static libs: ar.exe
debugger: GDB/CDB debugger:default
ressource compiler: windres.exe
make program: mingw32-make.exe
Dans debugger j'ai coché les 4 premières cases.
- Edité par AymericSt 17 novembre 2019 à 10:32:09
La programmation, c'est l'art d'exprimer sa créativité !
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Heuu, pourquoi transmet tu player en paramètre (alors qu'il ne sert à rien en plus)???
Tu devrais, à tout le moins, avoir un avertissement selon lequel ta variable player déclarée dans ta boucle cache le paramètre transmis, non?
Et, si j'étais toi, je cacherais le registry.assign<> dans différentes fonctions (createPosition(id, x, y) et createVelocity(id, dx, dy), car l'utilisateur n'a aucun besoin de savoir que c'est ton registry qui fait "tout le sale boulot" :D.
Et je ferais sans doute pareil avec les vues. Au final, l'utilisateur pourrais donc avoir un code pour la fonction main ressemblant à
int main(){
entt::registry registry;
/* appel à registry create en sous main */
auto player = createEntity();
/* appel à registry.assign en sous main */
createPosition(id, 0., 0.);
createVelocity(id, 1., 1.);
/* appel à view.get en sous main */
auto & pos = positionOf(id);
auto & velocity = velocityOf(id);
/* a priori, updatePosition va traiter tous ls
* élément qui ont dispose d'une position et d'une
* vitesse... Registry suffit amplement à cela
*/
updatePositions(registry); // position est au pluriel
/* ... */
}
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Merci pour l'explication ! pourrais-tu me montrer un exemple de code où il y std::cout qui écrit la pos.x et pos.y parce que je n'y arrive pas, tout n'est pas encore très clair pour moi avec entt, même si j'ai jeté un coup d'oeil à l'explication sur github(le fichier "entity.md").
Merci de votre aide à tous pour aider les gens qui sont complètement paumés.
La programmation, c'est l'art d'exprimer sa créativité !
enum class "is not a class or a namespace"
× 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.
La programmation, c'est l'art d'exprimer sa créativité !
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
La programmation, c'est l'art d'exprimer sa créativité !
La programmation, c'est l'art d'exprimer sa créativité !
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.
La programmation, c'est l'art d'exprimer sa créativité !
git is great because Linus did it, mercurial is better because he didn't.
La programmation, c'est l'art d'exprimer sa créativité !
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
La programmation, c'est l'art d'exprimer sa créativité !
La programmation, c'est l'art d'exprimer sa créativité !
La programmation, c'est l'art d'exprimer sa créativité !
La programmation, c'est l'art d'exprimer sa créativité !
La programmation, c'est l'art d'exprimer sa créativité !