Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker


Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Jeux: puie z / Jeux: Citymaime - Chapitre 1 / Jeux: Mer, îles et fous / News: Du neuf dans le making / News: Muma|Rope est disponible en (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

448 connectés actuellement

30732450 visiteurs
depuis l'ouverture

2429 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Guelnika & E-magination

RPG Maker Détente

New RPG Maker

Lumen

Tous nos partenaires

Devenir
partenaire



Détecteur à la Alien

Grâce à ce tuto, à vous les joies de la chasse au trésor ou de la chasse à l'homme.

Ecrit par Chuck Chan le 17/01/2014


❤ 0

But : Créer un détecteur grâce aux événements.

Mon parti pris : Le héros va demander à un totem de retrouver des PNJ dispersés sur la map. Il devra entrer le nom de la personne à retrouver, et le totem lancera un sortilège sur le héros lui donnant la direction où fouiller, à la manière du capteur de mouvement de Aliens.

image
Le sortilège m'indique avec ces ondulations que mon camarade est tombé dans le puits



Version courte (principe de base) :
En enlevant toutes les fioritures, voilà ce qu'il nous faudra :
1 - une animation ;
2 - un événement commun ;
3 - un interrupteur.


1 - On commence par créer l'animation du détecteur (j'ai opté pour des ondulations du genre "radar", à savoir l'apparence "Special 6") avec un son de pulsation pas trop agressif (j'ai choisi "Wind 1") puisqu'il va se répéter en boucle.

L'animation en détail

Spoiler (cliquez pour afficher)



On la duplique en 8 exemplaires et, avec l'option "Tout déplacer", on les place aux 8 points cardinaux par rapport au centre de l'animation, en les nommant en conséquence NORD, NORD-EST, EST, SUD-EST, etc. C'est tout pour l'animation.


2 - Ensuite, on crée un événement commun "Détecteur" en Processus parallèle avec un interrupteur "Détection". Dans cet événement, on crée une boucle avec en tête deux variables "X héros" et "Y héros" qui détermineront la position du héros en tout temps, et dans cette boucle, on crée les 8 conditions pour l'affichage de l'animation.

Comment déterminer les variable de la position du héros

Spoiler (cliquez pour afficher)



Ce qu'on veut, c'est qu'une fois les variables de la cible déterminées par l'interrupteur :
- l'animation NORD s'enclenche si le héros est à la fois sur le même axe X que la cible et plus bas sur l'axe Y de la cible ;
- l'animation NORD-EST s'enclenche si le héros est à la fois à gauche sur l'axe X de la cible et plus bas sur l'axe Y de la cible ;
- etc.

Une fois les 8 conditions posées, on ajoute une commande "attendre" de minimum 1 frame pour éviter que la boucle ne freeze le jeu (comme je ne veux pas que mon détecteur pulse trop vite, je mets 60 frames), et on ajoute aussi une commande de sortie pour laisser au joueur la possibilité de couper le détecteur s'il veut changer de quête, par exemple. Je choisis d'associer le bouton Z à l'interrupteur "Détection = désactivé" (attention, le bouton Z correspond par défaut à la touche clavier D).

L'événement commun en détail

Spoiler (cliquez pour afficher)




3 - Reste à créer l'interrupteur. Après un dialogue d'introduction du totem précisant que le bouton Z déclenche le détecteur, on définit les variables "X cible" et "Y cible" avec les coordonnées de notre cible sur la map (les coordonnées d'une case s'affichent tout en bas à droite quand on la sélectionne en mode éditeur), et on finit en activant l'interrupteur "Détection".

L'interrupteur du totem

Spoiler (cliquez pour afficher)




Et c'est parti, la chasse au trésor peut commencer ! Elle s'arrêtera avec la phase de dialogue de fin de quête qui désactivera l'interrupteur "Détection".

La fin de la quête

Spoiler (cliquez pour afficher)




Si vous voulez que le héros détecte un objet enterré dans le sol (ce n'est pas le cas dans mon exemple puisque le puits empêche le héros de marché sur la coordonnée exacte de la cible), il suffit d'ajouter une animation supplémentaire centrée sur le héros, et d'ajouter une condition dans l'événement commun pour le cas où "X héros = X cible" et "Y héros = Y cible".



Version complexe (parce que mon scénario l'exige) :

Nouvelles règles :
Tout ça, c'est très bien, mais je veux faire durer le plaisir pour le joueur en le faisant chercher TROIS personnages dispersés sur toute la map, ce qui implique dans mon cas de traverser minimum 3 lieux et la World Map. En plus, je veux que ce soit au joueur d'entrer le nom de sa prochaine cible, et une des trois cibles ne sera pas trouvable car elle se trouve sur un autre continent, loin au Nord. Challenge accepted ?


Ce serait trop compliqué de passer par les événements communs pour les variables de cible qui changeront à chaque map (possible mais compliqué). On va faire plus simple et ajouter un événement en processus parallèle sur chaque map nécessaire. Perso, j'ai choisi de le faire sur toute les maps de mon île (6 + world map), mais si c'est trop pour vous, il n'y a qu'à le faire sur les maps concernées et mettre un texte "vous êtes trop loin du totem" qui s'enclenche avec l'interrupteur "Détection" sur les maps hors zone.

Dans cet exemple, je ne vais me servir que d'un interrupteur, et le changement de cible se transmettra aux variables par une variable, comme dans ce tuto de Joke.

Tout cela implique de changer un peu l'événement commun pour éviter une latence qui risque de déboussoler le détecteur (ça m'est arrivé, probablement à cause des 60 frames de la commande "attendre"). On supprime donc les deux variables "X héros" et "Y héros" d'ici pour les rajouter dans chaque événement où elles se calculeront en même temps que les variables "X cible" et "Y Cible" (détails plus bas dans l'image "L'événement de la cabane de bûcheron ").

Commençons cette fois par l'interrupteur. Pour lui intégrer cette fonction de recherche par nom, on s'inspire de la méthode des portes codées de Vyslanté. Il faut tout d'abord créer un héros (par exemple le 007) sans nom, puis ajouter la commande "Entrer un nom..." après la phrase d'intro "Qui veux-tu retrouver ? (entrer un nom en majuscule)".

Si le joueur cherche Pierre et tape le nom sans erreur, il validera la condition "le héros 007 a Pierre pour nom". Suite à quoi on reset le nom du héros avec la commande "Modifier le nom...", on enclenche l'interrupteur "Détection", et on passe la variable "Cible" sur 1. On répète l'opération pour les deux suivants en incrémentant la variable "Cible", et on termine avec la condition "si Détection reste désactivé" qui affiche un message d'erreur et reset le nom du héros 007.

Le détail de l'interrupteur

Spoiler (cliquez pour afficher)




L'interrupteur est prêt, l'événement commun aussi, l'animation ne change pas ; il ne reste plus qu'à semer des événements en processus parallèle. Ils devront contenir la définition des variables "X héros" et "Y héros" (identiques à ce qui se trouvait dans l'événement commun), ainsi qu'une condition par cible avec des coordonnées spécifiques à la map où on collera l'événement.

image
La World Map

Débutons par la map de la cabane de bûcheron ; selon ma World map, la cible 1 et 3 se trouvent au Nord et la cible 2 au Nord-Est. Pour que le détecteur pointe toujours au Nord, je fixe la variable "X cible" sur "X héros" et "Y cible" sur 0. Pour simuler la diagonale Nord-Est, je place les coordonnées de la cible 2 en 017,000, c'est-à-dire juste à l'extérieur de la map.

L'événement de la cabane de bûcheron

Spoiler (cliquez pour afficher)




Même principe pour la World Map et la Map cible 1. Pour simuler que Jacques est plus au Nord que ce que montre la map, je cale "X cible" sur "X héros" et "Y cible" sur 0.

Pour varier, la cible 2 sera mobile. Il suffit de créer un événement Gontran (parcours aléatoire ou défini, au choix) qui s'enclenche dès que la variable "cible" vaut 2, et caler les variables "X cible" et "Y cible" sur "[Gontran] carte X" et "[Gontran] carte Y" (même principe que l'image "Comment déterminer les variable de la position du héros" du point 2).

image
Gontran, le gosse aux cheveux verts, se fait traquer.

Ne pas oublier de mettre un interrupteur qui désactivera "Détection" une fois la cible trouvée (le placer sur la cible elle-même est une bonne idée). Par contre, pas besoin de reset la variable "Cible".

Merci de m'avoir lu, en espérant que ça serve à quelqu'un. image



Tata Monos - posté le 20/01/2014 à 06:43:47 (28 messages postés)

❤ 0

Compte Non utilisé

Le 2 c'est le meilleur ! (Voila nemau heureux xd)


Chuck Chan - posté le 21/01/2014 à 01:18:38 (29 messages postés)

❤ 0

M. & Mme Chan

Hein ?!


Nemau - posté le 22/01/2014 à 03:31:09 (53215 messages postés) - admin -

❤ 0

Narrer l'autocatégorème

xDD

Chuck Chan > c'est juste un petit HS, dsl. ^^



Quel RPG Maker choisir ?Ocarina of Time PCPolaris 03


Joke - posté le 23/01/2014 à 17:37:04 (5090 messages postés)

❤ 0

Bilouteux fou

Je n'ai fait que survoler, mais avec mon super coup d’œil expert je peux dire que l'idée est géniale et que la programmation semble simple et efficace.

Vite fait, je dirais que tu peux rendre le code un tout petit poil plus simple en regroupant des conditions :

Au lieu de faire :

image

Tu pouvais proposer une imbrication plus intéressante des conditions entre elles (pour éviter les doublons et les superflus)

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Si YH > YC
  Si XH > XC
    Animation : Nord-Ouest
  Sinon
    Si XH < XC
      Animation : Nord-Est
    Sinon
      Animation : Nord
    Fin
  Fin
Sinon
  Si YH < YC
    Si XH > XC
      Animation : Sud-Ouest
    Sinon
      Si XH < XC
        Animation : Sud-Est
      Sinon
        Animation : Sud
      Fin
    Fin
  Sinon
    Si XH > XC
      Animation : Ouest
    Sinon
      Si XH < XC
        Animation : Est
      Fin
    Fin
  Fin
Fin



Le problème c'est que c'est plus chiant à expliquer. :D


Pour optimiser ainsi j'ai fait deux simplifications, qui peuvent se schématiser comme ça :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dans ton code, on reconnaissait cette forme :
 
Si [Condition A]
  Si [Condition B]
    ...
  Fin
Fin
Si [Condition A]
  Si [Condition C]
    ...
  Fin
Fin
 
 
Mais de quatre conditions on peut passer à trois :
 
 
Si [Condition A]
  Si [Condition B]
    ...
  Fin
  Si [Condition C]
    ...
  Fin
Fin



Et

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Dans ton code, on reconnaissait cette forme :
 
Si A > B
  ...
Fin
Si A < B
  ...
Fin
Si A = B
  ...
Fin
 
 
Mais de trois conditions on peut passer à deux :
 
 
Si A > B
  ...
Sinon
  Si A < B
    ...
  Sinon
    ...
  Fin
Fin



En combinant les deux optimisations... j'ai réduit tes 16 conditions à 8 conditions, c'est toujours ça de gagné ! ^^

biloumaster.fr, mon joli site ouèb tout bô tout frai !


Chuck Chan - posté le 23/01/2014 à 18:06:47 (29 messages postés)

❤ 0

M. & Mme Chan

Excellent, cette partie m'a beaucoup plu :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
Si A > B
  ...
Sinon
  Si A < B
    ...
  Sinon
    ...
  Fin
Fin
 


Optimization, you haz it !! Merci !

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers