Dan's Orbiter page

Orbiter Francophone => Création Orbiter Francophone => Topic started by: DanSteph on 25 June 2007, 22:33:42

Title: [tutorial] Peu de mémoire beaucoup de méthode
Post by: DanSteph on 25 June 2007, 22:33:42

Cliquez le lien ci-dessous pour retourner au sommaire des "tutoriels pour créer une DLL Orbiter"
http://orbiter.dansteph.com/forum/index.php?topic=6335.msg95352#msg95352


Peu de mémoire beaucoup de méthode

Pour éviter que vos premiers pas se résument à "au secours, j'y comprends rien fuyons" je vais vous donner quelques
Trucs, je vais être un peu verbeux, il vaut mieux lire tout ça à tête reposée, de toute manière si vous foncez sur le
Code sans prendre le temps, je doute que vous finissiez quoi que ce soit, foncer ce n'est pas bon au début.
Pas de faux espoirs quand même, certains sont doués pour la prog d'autres pas, ça requiers un esprit particulier, logique, acharné, intuitif, imaginatif ? Une recette mystérieuse en tout cas comme toutes les activités humaine complexe. Si vous avez déjà installé VC express et compilé un exemple comme indiqué dans le tuto 1 (voir sommaire) probablement que ça vous intéresse assez et c'est déjà un excellent début.


Pour commencer, je vais vous parler de moi, j'adore ça ;)

Donc votre serviteur, auteur de quelques addons connu sur Orbiter et d'un shareware populaire (75'000 lignes de code) n'a pratiquement jamais ouvert un bouquin C++ et n'a presque jamais posé de questions dans les forums ou autres à propos du C++ (une dizaine de fois en 20 ans) Il y a donc deux solutions:

1-Je suis un génie qui a la science infuse :flower:
2-J'ai la bonne méthode

Malgré mon désir je dois admettre tristement que la proposition 1 est fausse et que la bonne solution est donc la 2

La bonne méthode c'est la clé !

Le C++ c'est un ensemble de fonctions presque toujours les mêmes (une petite vingtaine sur quelques centaines) à
apprendre pour pouvoir pratiquement tout faire. Comme on ne veut pas faire tourner du code pour rien il faut taper dans des librairies (SDK) il y en a pour tout: pour programmer sur windows (MFC) pour les jeux (DirectX) pour Orbiter
(OrbiterSDK) la nous avons affaire à des milliers de SDK et des millions de lignes de code avec leurs propres fonctions ,méthodes et variables.

Conclusion: aucun homme normal ne peut tout apprendre, tout mémoriser et tout connaitre, le plus important donc
c'est d'avoir la bonne méthode pour trouver les informations quand on en a besoin. J'ai appris le C++ (et n'importe quel langage) en même temps que je faisais des programmes, mes premiers n'étaient pas géniaux il faut bien l'admettre, mais c'était surtout un défaut de méthode, une fois qu'on a la méthode on peut virtuellement apprendre un langage tout en écrivant une application complexe.

La bonne méthode c'est donc:

1-Savoir chercher, doc et exemples
2-Le pompage (et repompage)
3-connaitre son outil


1-Savoir chercher, doc et exemples

Savoir chercher est essentiel, pour cela il faut maitriser les outils de recherche que ce soit internet, VC++, la doc SDK etc etc. Et aussi savoir OU chercher.

Ou, c'est simple:
1-Les docs. Dans orbiter elle sont dans OrbiterSDK/doc, une lecture à faire après la prise de contact, le but n'est pas de mémoriser les choses mais d'avoir une vague conscience "d'avoir déjà vu ça dans la doc". Donc on sait ou chercher.
2-Les exemples: extrêmement utile pour voir "en pratique" comment sont fait les choses, dans Orbiter ils sont dans "OrbiterSDK/Samples" depuis le ShuttlePB très simple jusqu'au deltaglider pourvu de multiple animations et  d'un panel en passant par le Shuttle avec ses booster le choix est large.


Comment chercher:
Dans VC++ les outils de recherche vous permettent une recherche locale (seulement dans la page ouverte, seulement dans votre projet) mais aussi une recherche globale (dans toute la SDK, dans tout les exemples, dans toutes les librairies) je vous invite donc à presser le bouton VC++ en forme de jumelle (http://orbiter.dansteph.com/screenshot/dansteph/TutoSDKRecherche1.jpg) et bien examiner les options offertes. En donnant par exemple le chemin vers les exemples de la SDK (OrbiterSDK/Samples) vous pourrez fouiller parmis tout les exemple ce qui vous permettra de voir "comment les autres ont fait"

Par exemple on recherche avec le mot "AddMesh" qui est la fonction qui rajoute un model 3d, une fois la recherche faite vous verrez toutes les lignes qui contiennent ce mot dans les exemples, un double clique dessus et vous avez le code complet sous les yeux.

(http://orbiter.dansteph.com/screenshot/dansteph/TutoSDKRecherche2.jpg)

Mais surtout il faut savoir poser les bonnes questions, la il y a du talent de la logique et du flair, c'est souvent un vrai boulot de détective.

A partir de quelques éléments spartiate on "dévide la pelote" un mot clé nous en donne un autre qui nous amène a d'autres etc etc... si on veut faire un train d'atterrissage par exemple ("gear" en anglais) on peut rechercher "gear" dans les exemples, vous allez trouver assez au début la variable "gear_status" puis "SetAnimation", vous passer des exemples à la doc, vous fouillez, vous flairer, vous copiez/coller etc. etc.

Un bon programmeur c'est un bon détective d'abord.


Pour les fonctions C++ pur il y a la bonne touche F1 (on sélectionne une fonction comme "sprintf" et on appuie sur F1) mais la doc Microsoft est souvent relativement illisible pour un débutant, il reste les exemples souvent en bas de page.

Sinon il reste le net, aaaah le net ! la plus grande bibliothèque jamais crée par l'humanité ! :love:

imaginez des centaines de milliers de gens qui ont VC++, qui ont eu probablement les même problèmes que vous et qui ont posé la question dans des forums et autres, Vos réponses SONT sur le net forcement.

Exemple:
j'ai un probleme avec "sprintf" j'ai donc les mot clé "sprintf" "C++" (pour éviter les autres langage comme php) et "problème"

Et on y va: Google posez votre question, bien le diable si vous ne trouvez pas une réponse ou au moins un exemple qui ressemble a ce que vous voulez faire !

Autre exemple:
J'ai une erreur de compilation "Projet : error PRJ0003 : Erreur lors de la génération dynamique de 'cmd.exe'."
J'exclus la fin de la phrase (en francais) et je ne garde que "PRJ0003" "error" et "cmd.exe" c'est tellement spécifique avec ces trois la que j'ai de bonne chance de tomber sur les bonne réponse. Je "googlise" avec ça et je résous mon problème.

Et n'oubliez pas le net d'Orbiter, le forum "Orbiter SDK" officiel ou pleins de nouveaux on posé leurs questions sur la SDK, les forum franco ici aussi. D'excellentes ressources et votre premier choix pour les recherches spécifique à Orbiter.


2-Le pompage (et repompage)

Aucune SDK ne vient sans exemples, le plus évident pour démarrer un projet c'est de partir d'un exemple simple, d'essayer de le comprendre et de rajouter des petits bout piqué à droite et à gauche dans d'autres exemples pour construire votre bidule.  Vous apprenez en même temps que vous construisez votre addon.

Les exemples sont pas fait pour les iguanes quoi ;)

Le repompage c'est quand vous vous copiez vous même, comme il est impossible de ce souvenir de tout il suffit de ce rappeler vaguement le nom d'une fonction et après recherche de voir "comment on avait fait". Le copier/coller c'est l'ami du programmeur.



3-Connaitre son outils

MSVC une fois que ça tourne est génial et le bouton droite fait partie de cette génialité.

Si vous passez la souris sur une fonctions (ou n'importe quel code) une bulle jaune vous indique le prototype de cette fonction ou plus d'info sur la variable.

Par exemple "SetAnimation" vous montrera "bool VESSEL::SetAnimation(UINT anim,double state) const" dans une bulle jaune. C'est donc une fonction qui vous retourne un boolean (VRAI OU FAUX, 1 ou 0 quoi) qui est membre de la class "VESSEL" (pas de panique) et à qui on doit fournir un entier non signé (UINT) et un double (-145.97345897345 c'est un double par exemple) Les noms de variable vous donnent une idée aussi "anim" mouis bah ? mais "state" (etat) couplé avec SetAnimation on ce doute que cette variable double gere "l'etat de l'animation", comme c'est un double (prend n’importe quel valeur) et pas un bool (1 ou 0) on ce dit qu'il gère finement l'animation (train d'atterrissage par exemple). pas mal sans lire la doc hein ?

Ensuite on fait un clique droit sur cette fonction et la c'est la richesse:

(http://orbiter.dansteph.com/screenshot/dansteph/TutoSDKClickdroit.jpg)

Si on clique sur "atteindre la définition" on arrive sur le header "vesselapi.h" (les header sont des fichiers ou les fonctions sont déclarée) et en passant la souris sur l'onglet "vesselapi.h" on voit dans une bulle jaune que le chemin est "d:\orbitersdk\include" c'est donc un fichier de la SDK d'orbiter et on trouvera donc cette fonction dans la doc PDF de la SDK.

(http://orbiter.dansteph.com/screenshot/dansteph/TutoSDKVesselhapis.jpg)

"atteindre la déclaration" et rechercher toutes les références" sont aussi utiles le dernier vous donnera toute les fois que cette fonction (ou variable) est présente dans votre code... pratique.

(essayez avec sprintf "atteindre", le header est dans "visual studio 8/include" c'est donc un fichier C++)

Détective, détective !


Pour finir sur la méthode, une chose terrible pour le nouveau c'est l’afflux trop grand d'informations, on n'arrive pas à situer les choses et on est submergé par le nombre de nouveautés...

Dans VC++ il y a des tonnes d’icônes et des menus dans tout les coins, je vous rassure tout de suite, vous pouvez oublier le 90%.

Je me sert de 3-4 icones en tout et pour tout. D'abord les jumelles de recherche, les onglets en haut of course et la fenêtre de gauche qui montre les sources du projet, La fenêtre du bas qui vous donne les infos de compilation, résultat des recherches et informations quand vous debuggez.
En haut le sélecteur de mode debug/release et dans le menu du haut "Projet->Propriété de ShuttlePB"

Pour les touches c'est F7 (compile) F5 F10 F11 F9 pour lancer et debugger (voir le sommaire)

Le reste vous pouvez oublier plus ou moins j'utilise très rarement (vous apprendrez plus tard les finesses)



Message modifié ( 10-07-2012 06:25 )
Title: Re: [tutorial] Vos premiers pas avec la programation Orbiter
Post by: DanSteph on 26 June 2007, 01:37:00

Cliquez le lien ci-dessous pour retourner au sommaire des "tutorials pour créer une DLL Orbiter"
http://orbiter.dansteph.com/forum/index.php?topic=6335.msg95352#msg95352




Message modifié ( 26-06-2007 12:59 )