Sujet n°13224
Posté par Ku'rei le 7 Oct - 00:31 (2013)
Titre : [Utilitaire]Centralisation des changements d'apparence
Bonjour à toutes et à tous,
Tout les SK fournissent des nombreux chara d'un même héros (il ne manque parfois que quelques poses), et n'importe quel jeu de qualité (ou simplement moderne) utilise ces chara. Cependant, le changement d'apparence du héros peut se révéler compliqué et surtout incontrôlable. On ne sait pas comment et où sont modifié les apparences, si le héros est une héroïne, si on anime le héros, "Oh ! J'ai trouvé un super nouveau chara pour mon personnage ! Zut ! Faut que je modifie l'apparence partout, j'espère que je ne vais pas en oublier"..., bref c'est vite la galère.

J'ai mis au point, il y a peu, une technique de centralisation des changements d'apparence du héros et je souhaite la partager ici, avec ceux qui me liront.

Objectifs : Ca fait deux objectifs simples.

1. Principe de base


Imaginez que vous êtes une machine dont le rôle est de changer l'apparence du joueur (ou de lui faire une animation spéciale (pêche, vol, ...)). De quelles informations avez-vous besoins ? Je dois changer son apparence, quelle est cette nouvelle apparence ? Oui mais attend, je dois aussi savoir si le joueur a un avatar masculin ou féminin.

Voilà :Je ne pense pas avoir besoin de vous expliquer le fonctionnement des interrupteurs. En revanche, pour la variable, c'est autre chose. Je compte utiliser une variable globale que l'on nommera $temp. $temp contiendra des objets de types Symbol. Si vous ne comprennez pas, dites vous que vous aller rater votre vie et sauter au paragraphe suivant qui vous remontera le moral (sans doute).

Voici donc comment se structurera le changement d'apparence :

Définir la prochaine apparence puis appeler l'event commun gérant l'apparence.


2. Paramétrage du type de la prochaine apparence


Code:
$temp = :heros_normal
# Plus généralement
$temp = :heros_type_apparence

Qu'est-ce que ça veut dire ? Et bien que $temp contient :heros_normal qui est un symbole définis par vous-même (remplacez type_apparence par le nom de votre apparence). Voici les symbole utilisé de base par ce tutoriel :
  • :heros_normal → apparence du héros quand il marche
  • :heros_course → apparence du héros quand il cours
  • :heros_velo → apparence du héros sur un vélo
  • :heros_surf → apparence du héros quand il surf
  • :heros_anim_debut_surf → apparence du héros quand il monte sur son Pokémon en Surf
  • :heros_anim_fin_surf → apparence du héros quand il met pied à terre
Rien ne vous empêche de créer un nouveau type d'apparence spécifique à une animation comme par exemple :heros_anim_vol, :heros_anim_lancer_canne, ... C'est même ce qu'il faut faire pour ajouter de nouvelles animation/apparences.


3. L'événement commun ANIMER_JOUEUR_GARCON


Nous partirons du principe que le joueur joue un garçon et nous ne tiendront pas compte de l'interrupteur indiquant le sexe du personnage joueur.
Nous partirons du principe que la variable $temp a correctement été paramétrée par le maker (vous).

Ce qui donne un événement commun ANIMER_JOUEUR_GARCON (j'utilise les avatar de Red fournis avec PSP4G+):
ANIMER_JOUEUR_GARCON



4. L'événement commun ANIMER_JOUEUR_FILLE


C'est un copie conforme de l'événement précédemment créer mais utilisant les avatars d'un personnage féminin

5. L'événement commun ANIMER_JOUEUR


On peut maintenant changer l'apparence du joueur facilement. Reste à savoir quand il faut appeler l'un et quand il faut appeler l'autre. D'où la création d'un troisième événement commun : ANIMER_JOUEUR.


Remarquez que l'on retombe exactement sur l'appel décrit dans la partie 1. Pour utiliser correctement ce système, il faut que l'apparence du joueur ne soit modifiée UNIQUEMENT par le biais de l'event ANIMER_JOUEUR (sinon ,vous pouvez toujours retombez sur vos galère d'antan).

Le chara du héros n'est modifié qu'a un seul endroit du jeu (deux si on chipote et que le héro se travesti) mais vous pouvez la modifier à n'importe quel moment via l'appel de ANIMER_JOUEUR. Magique non ?

6. Pour aller plus loin


Vous voulez voir si vous avez compris comment utiliser ce système ? Et bien, repérez le changement d'apparence du héros dans l'événement Surf et modifier le pour utiliser l'événement commun ANIMER_JOUEUR.


J'espère que ce tuto servira, et qu'il vous aura plut. Si quelque chose n'est pas bien expliqué, n'hésitez pas, je serait là pour vous l'expliquer autrement.
Ku'rei

Posté par JN.Tasia le 29 Nov - 15:54 (2013)
Superbe tuto, sa me servira pour mon Game :D

Posté par Ku'rei le 29 Nov - 22:46 (2013)
Wahou ! J'avais perdu espoir d'avoir une remarque sur ce tuto ! Je commençais à me demander si les gens comprennaient son utilité ^^
Sinon, merci Imbécile heureux

Posté par og_loc-TATOO le 29 Nov - 23:04 (2013)
Moi j'ai toujours pas compris l'utilité '-'

Posté par Ku'rei le 30 Nov - 12:54 (2013)
Ok, alors je vais expliquer du mieux que je puisse compte tenu de ma monumentale gueule de bois. ^^

Quand tu change l'apparence de ton héros, tu fais quelque chose du genre :


Maintenant, imagine que tu as changer l'apparence de ton héros 200 fois (on pousse jusqu'au bout) dans ton jeu et que tu découvre un autre chara bien mieux pour ton héros. Tu devra changer 200 commandes d'event, tu risque d'en oublier. Tu pourrai simplement renommer le chara, mais si un événement utilise ce chara aussi tu corrompt tout.

Ce système, en plus de supprimer la trés pénible recherche de chara à chaque changement d'apparence, est une protection contre le changement. Et Dieu sait que ça arrive trés souvent dans notre domaine. Voici l'event avec ce système :


J'ajouterai une chose : ce système permet de créer des animations réutilisables sans copier/coller. Pour plus de précision je te laisse jeter un coup d'oeil aux event communs 'ANIMER_JOUEUR' de PSPOG. J'utilise cette méthode pour la canne à pêche, le surf, le vol, ...

Posté par Eternalis le 30 Nov - 14:14 (2013)
Bonjour Ku'rei ! Merci pour ce tutoriel de qualité !
Celui-ci a été ajouté à la liste des tutoriels section "scripts".

Posté par og_loc-TATOO le 30 Nov - 16:30 (2013)
Ah la je comprend mieux, et évidemment c'est très utile, surtout pour les gros projets Bouche extensible
Et je pense me servir de ce tuto moi aussi =D

Posté par Sansonic le 30 Nov - 23:27 (2013)
C'est un bon tutoriel cependant il y a une méthode largement plus simple et responsable dans le cas où l'on trouve un nouveau charas:
- Remplacer l'ancien charas par le nouveau dans le dossier "Graphics/Characters" (en donnant le nom de l'ancien au nouveau).


Ce n'est pas pour jouer les rabat-joies mais c'est plus logique d'aller corriger le problème à la source.

Posté par TouzaxA le 1 Déc - 09:11 (2013)
sansonic a écrit:
C'est un bon tutoriel cependant il y a une méthode largement plus simple et responsable dans le cas où l'on trouve un nouveau charas:
- Remplacer l'ancien charas par le nouveau dans le dossier "Graphics/Characters" (en donnant le nom de l'ancien au nouveau).

Ce n'est pas pour jouer les rabat-joies mais c'est plus logique d'aller corriger le problème à la source.

Ce qui n'est pas possible si l'on veut faire des boutiques de vêtements, comme dans XY. Imbécile heureux

Posté par Ku'rei le 1 Déc - 11:26 (2013)
Et puis, si tu veux faire une animation du héros, il vaut mieux qu'elle soit écrites à un seul endroit.

Posté par Nuri Yuri le 1 Déc - 12:00 (2013)
Si on veut faire un magasin de vêtement à la X et Y ce tuto est la pire des idées :b
Il faudra faire de la manipulation de bitmaps exécute à chaque démarrage du jeu et changement de vêtements. (Et dans ce cas, il suffira de jouer avec une variable de jeu qui dit si on court ou pas pour choisir le bitmap à utiliser en tant que chara :b)

Posté par TouzaxA le 1 Déc - 15:26 (2013)
Yuri a écrit:
Si on veut faire un magasin de vêtement à la X et Y ce tuto est la pire des idées :b
Il faudra faire de la manipulation de bitmaps exécute à chaque démarrage du jeu et changement de vêtements. (Et dans ce cas, il suffira de jouer avec une variable de jeu qui dit si on court ou pas pour choisir le bitmap à utiliser en tant que chara :b)


Ouais, après réflexion, c'est foireux. XD
Changer d'apparence, disons. Coupable

Posté par Nuri Yuri le 1 Déc - 15:35 (2013)
Oui, là pour changer entre marcher pêche etc... ça ne pose aucun problèmes :b

Posté par Sphinx le 1 Déc - 15:52 (2013)
Dans l'exemple course / vélo(s) / surf / pêche, le plus souvent ce sont des évents communs qui les gèrent ^^ Donc on peut déjà facilement centraliser les changements de charas (gérer le switch sur ces évents, fille / garcon, ca oblige juste à répéter une condition :p)

Toutefois, pour des jeux qui ne se limiteraient pas à ces changements de charas, ca peut être utile je le reconnais ^o^

Posté par Ku'rei le 1 Déc - 17:52 (2013)
Ou on utilise l'attribut character_name de l'event $game_player :
$game_player.character_name = $game_player.move_character_base+num_vetement+".png"
avec move_character_base = "heros_m_course_" ou "heros_f_marche_", ...

et les attributs
anim_count et direction de $game_player pour choisir le chara.
Après avoir fait un attr_accessor :anim_count dans Game_Character

Normalement ça changera l'apparence. Et supprimerais toutes les condition de l'évent commun.

Mais on va encore me reprocher d'utiliser les script pour tout et n'importe quoi ^^

Posté par Sansonic le 1 Déc - 18:44 (2013)
TouzaxA a écrit:
sansonic a écrit:
C'est un bon tutoriel cependant il y a une méthode largement plus simple et responsable dans le cas où l'on trouve un nouveau charas:
- Remplacer l'ancien charas par le nouveau dans le dossier "Graphics/Characters" (en donnant le nom de l'ancien au nouveau).

Ce n'est pas pour jouer les rabat-joies mais c'est plus logique d'aller corriger le problème à la source.


Ce qui n'est pas possible si l'on veut faire des boutiques de vêtements, comme dans XY. Imbécile heureux


Forcément puisqu'il y a un décalage entre changer le visuel du héros pendant le développement du jeu et permettre au joueur de le faire donc dans une phase "post-développement".


Cependant partant de l'exemple que Ku'rei a donné pour le cas où le maker trouve "LE" nouveau chara pour le héros, au lieu de s’empêtrer à reprogrammer son jeu avec l'aide de ce tutoriel, il est plus simple pour lui d'aller remplacer dans le dossier source le charas concerné (et minimiser les pertes d'octets en supprimant l'ancien), quittes par la suite à adopter de meilleures habitudes de programmation.
Ku'rei a écrit:
Et puis, si tu veux faire une animation du héros, il vaut mieux qu'elle soit écrites à un seul endroit.


Indéniable, c'est ce que j'ai proposé dans le Master Event pour le Vélo et le "Sprint" (chaussures de courses), mais ce n'est pas sur ça que je dirigeais ma remarque.


Quoi qu'il en soit c'est une bonne idée.