mercredi 22 décembre 2010

38 - Preloader

Un preloader, c'est un écran de chargement qui apparait au début d'une animation Flash et qui aide l'utilisateur à patienter en attendant qu'elle soit prête à être jouée ; le pourcentage de données chargées est généralement indiqué, et une petite animation sympa peut être intégrée pour rendre l'attente plus agréable.

J'ai donc programmé aujourd'hui le preloader de mon jeu ; il consiste en une ligne horizontale blanche qui balaie l'écran :
  • Si le pourcentage de données chargées est nul, la ligne est située tout en haut de l'écran ;
  • Une image est située au centre de l'écran ; lors de son passage, la ligne altère l'apparence de l'image et lui donne un aspect pixélisé ;
  • Lorsque le chargement est à 100%, la ligne se trouve tout en bas de l'écran ; néanmoins elle continue à descendre et disparait de l'écran, et quelques dixièmes de secondes plus tard un fondu au noir nous fait passer du preloader à l'écran titre.
J'ai imposé une durée minimale à l'animation du preloader : Ainsi, même si le chargement est rapide, la ligne ne peut pas descendre de plus de 2 pixels par frame (1/25 de seconde).




J'envisage de soumettre mon jeu au site Newgrounds ; à cet effet, j'ai créé une version alternative du preloader :

avant le passage de la ligne / après le passage de la ligne

dimanche 19 décembre 2010

37 - Menu Clic Droit

Les cinématiques de fin sont enfin timées convenablement ; j'ai donc pu enchainer sur le menu clic droit.

Quand on effectue un clic droit sur un fichier Flash standard, on a accès à de nombreuses options : lire, zoomer, en avant, rembobiner...
Le problème, c'est que si un joueur clique sur "en avant", il accède à la scène suivante, ce qui peut engendrer de nombreux bugs et/ou tricheries :

Dans mon jeu, les scènes "playerSelect", "donjon" et "ending" se suivent dans cet ordre.
  • si on clique sur "en avant" alors qu'on est à l'écran de sélection du personnage, on se retrouve dans le donjon sans avoir chargé les stats du Héros ;
  • si on clique sur "en avant" alors qu'on est dans le donjon, on accède directement à la cinématique de fin.
Pour éviter ces désagréments, il faut modifier le menu clic droit en supprimant les commandes de base ; on peut aussi ajouter ses propres commandes personnalisées.

var MENUPERSO = new ContextMenu();// création de la variable "menu contextuel personnalisé"
MENUPERSO.hideBuiltInItems();// suppression des commandes usuelles (lire, rembobiner, zoomer... )
var commande1 = new ContextMenuItem("Reset", reset); // la commande "Reset" appelle la fonction "reset" définie plus bas
var commande2 = new ContextMenuItem("Version " add _global.version, version);
MENUPERSO.customItems.push(commande1); // on ajoute la commande1 au menu
MENUPERSO.customItems.push(commande2);
function reset() { // cette fonction permet de retourner à l'écran titre
maxdepth = 2000;
for (i=0; i<=maxdepth; i++) { removeMovieClip(_root.getInstanceAtDepth(i));
// on efface tous les clips issus des scènes précédentes pour avoir un écran propre
}
gotoSceneAndPlay("preloader", 1);
// on retourne à la première scène du jeu
}
function version() {
// si la variable _global.version a pour valeur "1.00", alors la commande du menu aura pour nom "Version 1.00"
// le numéro de la version est indiqué à titre informatif : cliquer dessus n'a aucun effet
}
_root.menu = MENUPERSO;

Ce qui nous donne ceci :

Prochaine étape : Création du Preloader !

jeudi 16 décembre 2010

36 - Cinématiques de Fin

Je n'ai pas beaucoup avancé ces 2 dernières semaines ; néanmoins les 3 cinématiques de fin sont presque prêtes, il faut juste que je retravaille encore un peu le timing (je veux que les scènes ne soient pas trop longues, mais que le joueur ait quand même le temps de lire les textes et de regarder les images).

Après la cinématique de fin, le staff roll défile et présente "l'équipe de programmation" (c'est à dire... moi !), les logiciels utilisés, et la liste des personnages du jeu (le Héros, les PNJ, les ennemis).

Un indice est donné après le staff roll afin d'aider le joueur à débloquer les autres fins.