Oula, 2 posts un jour, c’est bon, XakuX serait-il devenu un prof fou ?
VITE, TOUS AUX ABRIS, PLANQUEZ VOS CULS, ON SAIT PAS DE QUOI IL EST CAPABLE AVEC SON ENGIN !Non, juste fou tout court, enfin comme d’hab’ quoi
En fait, simplement, lorsque j’ai fais mon précédent tuto’, en pleine lancée, j’ai eu l’idée folle de détaillé le script main, qui, je pensais, allait me prendre 5 lignes, m’en a pris plusieurs dizaines
Alors étant donné que ça ne rentre pas vraiment dans le cadre de notre cours, mais que je l’ai fais quand même, alors je le poste.
J’ai mis quelques paragraphes en gras car ils peuvent être utile, je les réexpliquerai sans doute, mais ce sera toujours ça de pris.
- Code:
-
#==============================================================================
# ** Main
#------------------------------------------------------------------------------
# After defining each class, actual processing begins here.
#==============================================================================
unless Font.exist?("UmePlus Gothic")
print "Le fichier Font 'UmePlus Gothic' n'a pas été trouvé"
exit
end
begin
Graphics.freeze
$scene = Scene_Title.new
$scene.main while $scene != nil
Graphics.transition(30)
rescue Errno::ENOENT
filename = $!.message.sub("No such file or directory - ", "")
print("Le ficher #{filename} n'a pas été trouvé.")
end
Chose évidente et que j’ai oublié de préciser, parce qu’elle me semblait évidente, mais un # au début d’une ligne donne à toute la ligne l’attribut de commentaire : C'est-à-dire que celle-ci n‘est pas lu par le script, elle sert à donner des indications pour nous aider à comprendre le fonctionnement des scripts (et vous verrez, par la suite, combien ça peut-être utile ^^)
Un autre détail, vous verrez aussi par la suite que la plupart des lignes de script peuvent être traduis par des phrases, et donc, la connaissance approximative de certains termes anglais peut vous être aussi très utile, autant pour retenir que pour apprendre de nouvelle commande que j’aurais le malheur de ne pas vous indiquez (ou même pour le nom de variable, enfin, je m’avance un peu)
Ce détail donné, passons à la suite :
Unless Font.Exist?("UmePlus Gothic")
Bon, déjà, vous voyez que le Unless apparait en bleu, je en l’avais pas précisé par non plus, mais ce sera le cas pour toutes les fonctions, c'est-à-dire… des fonctions, des commandes qui ont des effets plus ou moins diverses (condition, méthode, opérateur logique, pour ceux à qui ces termes disent quelques choses). En l’occurrence, dans ce cas, notre Unless, c’est l’inverse d’une condition, je vais vous expliquer rapidement le fonctionnement d’une condition dans tout langage de programmation pour ceux qui ne le sauraient pas où ne le comprendraient pas bien.
Une condition, c’est un opérateur qu’on peut traduire par « Si », dans un langage de programmation, que ce soit en évent dans RM, dans les scripts ou en C++, les conditions fonctionnent toujours de la façon suivante :
Si 1
Alors
….
Fin
Qu’est-ce donc que ce « 1 » ? En fait, c’est le résultat vérifié d’une égalité, si vous voulez, une sorte d’interrupteur activé en évent dans RM (en script, on appelle ça une variable booléenne, mais si vous ne retenez pas le nom, ne vous inquiétez pas, ça vous fera seulement 2 points de moins pour votre exam’ ) vous allez comprendre, prenons un exemple simple :
Si X = 0
Dans ce cas là, que pourrais renvoyez X = 0 (Dans le cas où c’est une vérification de la valeur de X et non pas une équation, qu’on soit clair ^^) ? C’est vrai ou c’est faux, y a pas de variable (vous noterez le mot utilisé ^^) possible, et ce sera le cas pour toutes les conditions de la terre : Une condition est toujours suivi d’une opération/commande résultant d’un booléen. Donc, si X = 0 est vrai (donc que X est égale à 0) alors cette opération nous renverra le résultat 1, Sinon (si X est différent de 0) alors cette opération nous renverra le résultat 0, clair ?
Bon, on s’est un peu éloigné de notre sujet, je sens que ce cours va être long -.- Bon, donc je vais essayer de faire le plus cours possible en restant clair tout de même.
Donc notre Unless est l’inverse d’une condition (un « if » en Ruby, retenez-le, il est simple et clair, et je ne le repréciserai peut-être pas la prochaine fois) C'est-à-dire, une condition renvoie les commandes qui la suive lorsque l’opération booléenne qui la suit donne pour résultat 1 (donc que c’est vérifié, que X=0 dans notre exemple d’avant) l’Unless, c’est lorsque l’opération vaut 0 (donc que X différent de 0, abrévié X != 0 pour ceux qui ne le saurais pas)
Donc que l’opération booléenne n’est pas vérifiée !
Donc, ça veut dire que l’enchainement de commande qui suit le unless ne s’activera que si son opération est fausse, comprise ?Et donc l’opération booléenne utilisé est :
Font.exist?("UmePlus Gothic")
Qu’est-ce donc que ce baratin ? Et bien, c’est assez simple : Font, c’est la police de caractère en anglais, elle fait parti de l’une des variables originels qui permettre d’aller chercher les polices de caractères dans l’ordinateur. Le .exist?, c’est elle aussi une méthode (def) originel qu’on peut appliquer aux class pour vérifier si elle existe, oui oui mes amis, c’est possible ça
. l’indication entre parenthèse, c’est ce qu’on appelle un « argument » de la class (on a encore largement le temps de voir comment ça fonctionne
) Donc en gros, l’argument ici, c’est le nom de la Police. Donc résumé :
Unless Font.exist?("UmePlus Gothic") => Si la police "UmePlus Gothic" n’existe pas
(la négation pour exprimer l’opposition à une condition)
Les quelques lignes qui suivent :
print "Le fichier Font 'UmePlus Gothic' n'a pas été trouvé"
exit
end
La première ligne j’espère ne pas avoir à la décrire
La seconde ferme le jeu (on en verra une autre plus tard)
Le « end » finit l’Unless, ce qui suit le end ne fait plus partie de la « non-condition » ^^
Bon, 1 ligne en 5 paragraphe, 3 en 3 lignes, voyez donc à quel point la longueur des explications peut être homogène
Bien, passons à la suite :
- Code:
-
begin
Graphics.freeze
$scene = Scene_Title.new
$scene.main while $scene != nil
Graphics.transition(30)
rescue Errno::ENOENT
filename = $!.message.sub("No such file or directory - ", "")
print("Le ficher #{filename} n'a pas été trouvé.")
end
Bon, celle-là, on va pas trop la détailler, pour la simple et bonne raison que ne comprends pas tout à fait une chose, m’enfin !
Donc le begin au début, n’importe qu’elle débutant pourrait croire que c’est la commande qui déclenche le jeu, et d’ailleurs, même des pros le pense, c’est tellement plus simple comme ça !
Et bah non, cette commande sert à gérer les exceptions, c'est-à-dire que si dans les lignes de code qui suivent une erreur de script se déclenche, on peut récupérer l’erreur en mettant un rescue suivi du nom de l’erreur (je ne vous détaillerai pas le nom de toutes les erreurs, je doute que vous en ayez besoin un jour ^^) et à ce moment afficher un message où faire autre chose (en l’occurrence, là, ça affiche un message)
Seulement, ce que je ne comprends pas, c’est d’où viens l’erreur, l’erreur donné est un manque de fichier, et je ne vois pas trop d’où elle peut venir… de Graphics sans doute, bref !
Graphics.freeze
Permet de geler (encore de l’anglais vous noterez) tout ce qui se réfère à la class Graphics (encore une class originels, vous inquiétez pas, y a que le script main qui en a autant ^^)
$scene = Scene_Title.new
$scene.main while $scene != nil
J’espère ne pas avoir a détaillé la première ligne et le début de la seconde ? sinon référez vous au dernier cours bande de macaque roux !
Le while $scene != nil est une boucle, comme elle est implémenté là, c’est très rare, et c’est juste pour éviter les bugs… En fait c’est très stupide ce qu’ils font, m’enfin, je passe ce détail !
Graphics.transition(30)
Il dégèle l’écran de tout à l’heure en affichant les éléments en fondu noir sur 30 frames, mais de toute façon, le script main n’affiche rien, c’est seulement la fonction dans le script Scene_Title qui déterminera le temps d’apparition des images
Les 4 dernières, je les ai déjà expliqué rapidement avec le begin, simplement un détail, dans la commande print, on a #{filename} qui correspond à l’affiche de la variable filename dans le print, et les commandes qu’on applique à filename… personnellement je ne les comprends pas trop, mais sérieusement, vous n’en aurez pas non plus besoin pour le moment ^^
Nous en avons fini avec notre script main, bon, le détaillé vous aura appris 2-3 choses et remis un peu à jour sur ce qu’on avait déjà vu.
Sur ce, bonne chance pour votre futur exam’
!