Qui ne s'est jamais dit "Si seulement je pouvais afficher un petit générique de fin pour dire au revoir au joueur ou pour faire un peu de pub pour le board de mon projet..." ? Qui n'a jamais fait de cauchemars parce qu'il ne pouvait pas afficher ses crédits lorsque le joueur fermait son jeu ? Qui ?
Ah, tout le monde ? Ok ce n'est pas grave. Faites semblant.Voici comment, désormais, vous pourrez ajouter un :
Générique de fin !
Le générique de fin se présente sous la forme d'images qui se succèderont à l'écran lorsque le joueur quittera sa partie. C'est assez rudimentaire, mais je crois que ca suffira dans 80-90% des cas. Ceux qui savent scripter, bien sur, pourront très facilement personnaliser l'animation.
Bon étant donné que je n'ai plus grand chose à dire pour le moment, passons de suite à la suite.
- Script Module, recherchez :
Code: |
if exception.type == SystemExit return end
|
puis remplacez le par :
Code: |
if exception.type == SystemExit ExitGenerique.start return end
|
- Dans le script Config Panel (pour 0.7) ou Config Panel 4G+ (pour 4G+) ajoutez :
Code: |
# -------------------------------------------------------- # EXIT_TPS # Nbre de secondes max que doit durer le générique de fin. # Pour le confort de vos joueurs, il est recommandé de ne pas # faire de génériques de plus de quelques secondes. # Si le temps total n'est pas divisible par le nombre d'images # alors le temps par image sera arrondi selon les règles # arithmétiques en vigueur. # -------------------------------------------------------- EXIT_TPS = 0 # -------------------------------------------------------- # EXIT_IMGS # Liste des images qui apparaitront lorsque le joueur quittera le jeu # Mettre [] pour désactiver le générique de fin # -------------------------------------------------------- EXIT_IMGS = [] # -------------------------------------------------------- # EXIT_MSG # Message qui sera affiché lorsque le joueur tentera de fermer le jeu # pendant le générique de fin # Mettre false pour autoriser le joueur à ne pas regarder le générique # jusqu'au bout # -------------------------------------------------------- EXIT_MSG = false
|
juste après :
- Dans un nouveau script au dessus de Main, copiez / collez ceci :
Code: |
#============================================================================== # ■ ExitGenerique # Pokemon Script Project - Sphinx # 11/11/09 #----------------------------------------------------------------------------- # Scène à ne modifier que si vous savez ce que vous faites #----------------------------------------------------------------------------- # Générique de fin #-----------------------------------------------------------------------------
module ExitGenerique include POKEMON_S def self.start sprite = Sprite.new sprite.z = 50000 bool = true i = 0 while bool begin while i < POKEMON_S::EXIT_IMGS.size Graphics.freeze sprite.bitmap = RPG::Cache.title("Generique/#{POKEMON_S::EXIT_IMGS[i]}") Graphics.transition(5) tmp = 0 while tmp < (((POKEMON_S::EXIT_TPS.to_f / POKEMON_S::EXIT_IMGS.size) * Graphics.frame_rate).round - 5) Graphics.update tmp += 1 end i += 1 end bool = false rescue SystemExit if POKEMON_S::EXIT_MSG print POKEMON_S::EXIT_MSG else return end end end end end
|
Et c'est déjà fini ! =)
Amis qui seraient arrivés là parce que le III) suit le II), vous avez parfaitement le droit de passer directement au IV), je ne vous en voudrai pas. ^^
Si vous êtes en train de lire cette phrase, c'est donc que vous voulez rester ici, alors commencons sans plus tarder.
Les plus observateurs auront remarqué que ce bout de code :
Code: |
if exception.type == SystemExit return end
|
se trouve dans le module de gestion des erreurs - c'est ce module qui gère la création des sauvegardes automatiques et des rapports de log -. Ce bout de code est une condition. Il teste si le type de l'erreur relevée est du type SystemExit. Etrangement, c'est ce type d'erreur système qui est générée lorsque le joueur ferme le jeu, soit par les touches Alt+F4 de son clavier, soit en cliquant sur la croix qui est en haut à droite de la fenêtre de jeu, soit lorsque la commande exit est exécutée dans RMXP. Bref, c'est l'erreur qui est lancée lorsque le joueur quitte le jeu. Cette condition sert à ne pas générer de rapport d'erreurs lorsque le joueur quitte le jeu.
En ajoutant :
Code: |
ExitGenerique.start
|
juste avant le return, on demande au programme de lancer le script ExitGenerique.start avant de quitter le programme.
Le dernier détail réellement intéressant dans ce script, c'est cette opération appelée dans la boucle while :
Code: |
(((POKEMON_S::EXIT_TPS.to_f / POKEMON_S::EXIT_IMGS.size) * Graphics.frame_rate).round - 5)
|
POKEMON_S::EXIT_TPS contient la durée totale que doit faire le générique de fin, POKEMON_S::EXIT_IMGS.size retourne le nombre d'images que compose le générique, et Graphics.frame_rate, le nombre de frames affichées à l'écran par secondes. Ca permet d'être au plus près de la réalité (la transition d'une image à l'autre dure 5 frames, d'où le - 5 en fin de calcul), et donc d'avoir un générique qui dure pratiquement tj le même temps d'un PC à un autre, mais aussi dans le cas où un PC aurait une soudaine charge de travail, & passe de 40 fps à 1 fps (<= ce qui aurait multiplié par 40 la durée du générique si le calcul ne s'adaptait pas en fonction du nbre de fps !!!). C'est pour la même raison que j'ai utilisé une boucle while plutôt qu'une boucle for. En effet, si le PC avait perdu de la puissance pendant que tournait la boucle for, le générique s'en serait retrouvé rallongé d'autant. Alors qu'avec la boucle while, quoiqu'il arrive, le générique ne durera pas plus longtemps que prévu.
Ah, j'en vois sourciller ! "Et si le maker ne met aucune image, ca va diviser par 0 !" Oui mais... Non. Et cette protection, c'est la première boucle while qui me la donne :
Code: |
i = 0 #......... while i < POKEMON_S::EXIT_IMGS.size
|
D'abord, on initialise i à 0, puis ensuite on teste si i est inférieur strict au nbre d'images. S'il n'y a aucune image, alors 0 < 0 retournera false, et on entrera jamais dans la boucle while ! Bien sur, i est incrémenté à la fin de cette boucle première while. Ce n'est donc pas non plus une boucle infinie.
Dans le II), vous avez ajouté quelques lignes au script Config Panel (ou Config Panel 4G+). C'est là que se règlera toutes les options du générique de fin.
EXIT_TPS : c'est la durée totale (en secondes) du générique. Ca peut être un nombre entier, ou un nombre décimal. Gardez simplement à l'esprit que si cette durée totale ne peut pas être répartie également entre toutes les images (exemple, 5.21 secondes entre 6 images) alors le script se chargera lui même d'arrondir le tout pour que ca colle parfaitement.
EXIT_IMGS : c'est un tableau qui répertorie l'ensemble des images à afficher. Toutes ces images doivent IMPERATIVEMENT se trouver dans Graphics/Title/Generique et l'ordre dans lequel vous mettrez ces images aura énormément d'importance. C'est dans cet ordre qu'elles s'afficheront. Si vous ne voulez pas activer le générique de fin, il vous suffira de ne rien mettre dans les crochets.
EXIT_MSG : c'est le message qui sera affiché si le joueur tente de fermer le jeu. Pendant l'affichage de ce message (dans une boite de dialogue classique), le générique sera en pause jusqu'à ce que le joueur clique sur Ok. En mettant false au lieu d'une phrase, vous autoriserez le joueur à fermer le jeu pendant le générique.
/!\ Par défaut, toutes les options sont réglées de facon à désactiver cette fonction.
N'abusez pas du générique ! Ne collez pas un générique d'une demi heure pour raconter votre vie ! Non seulement, ca risque de souler passablement votre joueur, mais en plus il pourra toujours forcer la fermeture de votre jeu (via le gestionnaire des tâches) !
Je pense qu'au delà de 5 secondes, votre générique sera trop long. A vous de voir, après, ce que vous voulez y mettre. Ca peut être les crédits de votre jeu, ca peut être le nom de votre forum, ca peut être un mot de remerciement, ... Bref, ca peut être pas mal de choses ^o^ On peut en faire défiler, des images, en 5 secondes !
Souvenez vous aussi que ce générique s'affichera à chaque fois.
Je ne sais pas ce que vous penserez de cette petite fonction supplémentaire, mais n'hésitez pas à tester puis à me laisser vos impressions. Je n'ai pas voulu faire un truc plus compliqué (en ajoutant des transitions plus élaborées, entre autre), mais ca n'est pas infaisable.
Bien sur, comme d'hab, si vous utilisez ce script, pensez à moi =)