Partagez
Aller en bas
avatar
TaZ
Membre

Nombre de messages : 42
Age : 24
Distinction : aucune
Date d'inscription : 17/04/2010

Tutoriel - Passage à niveaux [Event]

le Mar 20 Avr 2010 - 13:44
Tutoriel



Thème du tutoriel:

Vous voulez pouvoir créer un passage à l'aide d'un quelconque objet sur le terrain ? Un tronc d'arbre
encore debout, un pilier, une caisse en bois traînant dans les parages ? Vous voulez innover un peu, sortir des séries d'interrupteurs qui font apparaître des ponts ? Vous voulez pouvoir réaliser un petit système de passage identique à celui utilisé dans Golden Sun, lorsqu'on utilise Frimas, ou encore lorsqu'on déplace une caisse ou bien plusieurs caisses afin de pouvoir rejoindre une autre partie de map ? Ce tutoriel vous est donc dédié.

Nécessités:

Plusieurs interrupteurs, plusieurs variables, pas mal de pages d'évènements... Tout dépend du nombre d'objets créant le passage.


I – Créer l'environnement

Le but étant de créer un passage reliant deux « parties » quelconques de map à l'aide d'un objet que vous déplacerez afin de vous aider à passer, il faut tout d'abord créer l'environnement adéquat.
Vous pouvez donc créer deux parties de « montagnes » de même hauteur avec un creux les séparant. Vous placerez un objet tel qu'une caisse, ou bien un pilier, ou autre objet quelconque de la même hauteur que les deux montagnes.
Les deux montagnes ne sont qu'exemple, vous pouvez imaginer d'autres situations: une rivière, deux toits de maison, une série de piliers avec l'un deux manquants, …

Une map pour exemple:
Spoiler:

II – Détermination du passage à créer grâce à l'objet déplaçable

Voulez-vous créer un passage qui vous permettra de marcher simplement sur l'objet déplacé pour rejoindre l'autre côté ? Voulez-vous sauter sur cet objet ? Voulez-vous en placer plusieurs à la suite pour sauter sur chacun d'eux afin de rejoindre l'autre partie ?

1)Déplacer l'objet en question

Pour ne pas avoir à paramétrer un événement complet afin de déplacer proprement un objet, veuillez insérer ce script dans votre liste:
Spoiler:
Code:
class Game_Map

  def activateEventPos(x, y, switchCode)

    eventsAtPos = events_xy(x, y) # Array
    if eventsAtPos.length > 0
      key = [ $game_map.map_id,eventsAtPos[0].id, switchCode]
      if $game_self_switches[key]  == false
          $game_self_switches[key] = true
          eventsAtPos[0].refresh
      end
    end
  end
 
  def  activateEventFrontChar (switchCode)
    x = $game_player.x
    y = $game_player.y
    direction = $game_player.direction

    case direction
      when 2
            y += 1
      when 4
        x -= 1
      when 6
        x+= 1
      when 8
        y -= 1
    end
    activateEventPos(x, y, switchCode)
  end

end

Pour manier ce script correctement, se référer au tutoriel suivant : Voir tutoriel

J'utiliserai aussi l'image suivante:
Spoiler:

Afin de déplacer un objet correctement, un événement semblable au suivant est donc nécessaire:
Spoiler:



La page 1 devra rester vide, mais devra avoir la même apparence que la page 2 et que toutes les autres pages de l'évènement.

Un évent commun doit aussi être créé. Voir le tuto cité précédemment.

Vous aurez compris que l'on vérifie si la magie utilisée est bien celle qui permet de déplacer un objet, puis nous vérifions la touche appuyée afin de déterminer dans quelle direction l'objet va se déplacer. Nous déterminons aussi la direction dans laquelle regarde le héros, sans ça, l'objet peut très bien se déplacer sur le héros si aucune condition n'est créée. Les étiquettes servent afin de ne pas pouvoir déplacer l'objet plusieurs fois à la suite (Exemple: Bas → Droite en une seule utilisation).

Étant donné que nous voulons pouvoir créer un passage qui ne sera praticable qu'en présence de l'objet nous devrons donc déterminer au départ deux variables qui gèreront la position x et la position y de l'évènement consacré à cet objet.
Vous devrez donc créer un nouvel événement, en processus parallèle, semblable au suivant:
Spoiler:

Vous devrez ensuite déterminer quel type de passage vous voulez créer. Un passage simple, qui sera praticable directement lorsque l'objet sera placé à l'endroit voulu, ou bien un passage où le héros devra sauter sur l'objet afin de pouvoir passer ? Ou plus ..? Voici donc les différentes solutions expliquées et détaillées:

2)Différents passages possibles

a) Passage simple

Ici, passage simple signifie passage créé directement après le placement de l'objet en question. Le héros n'aura qu'à marcher dessus afin de passer.
Cependant, quelques réglages devront être fait afin de pouvoir faire passer le héros proprement.

Vous devrez rendre l'objet en question praticable le temps du passage du héros.
À l'endroit précédant le passage, vous devrez donc placer un événement Au contact du héros, vérifiant la position de l'objet grâce aux variables. Si la position est exacte, vous devrez donc activer un interrupteur x.

Spoiler:

Créez une nouvelle page à votre événement d'objet. En condition principale, déterminez l'interrupteur « x », x représentant l'interrupteur choisi après la vérification de la position de l'objet.
Cette nouvelle page devra être au dessous du héros, et traversable, afin que le héros puisse passer.
Vous devrez choisir une apparence à une seule case de hauteur: prenez donc l'image du tronc, séparée en deux, et ne mettez que le haut.
Créez un évènement en dessous de celui-ci existant lorsque l'interrupteur x est activé.
Pensez aussi à rendre le sol autour du pilier impraticable le temps du passage grâce au script de ASHKA...

Spoiler:

Si vous redescendez à l'endroit où l'objet peut être pris en contact à son pied, pensez à désactiver l'interrupteur le rendant traversable et en dessous du héros.


b) Passage avec saut simple

Ce système de saut ne diffère pas énormément du système de passage simple.
Comme ce dernier, il nécessitera tout d'abord une vérification de la position de l'objet par l'intermédiaire d'une condition vérifiant la valeur des variables gérant les positions x et y.
Si ces valeurs sont bonnes, vous devrez donc faire sauter votre héros et activer un interrupteur x.

Spoiler:

Créez, comme pour le système de passage simple, une nouvelle page à votre objet, qui a en condition principale l'interrupteur x activé, et étant « en dessous du héros » (Traversable n'étant pas nécessaire cette fois-ci), et mettez le en « automatique» (Si l'évènement n'est pas automatique, le héros peut sortir du pilier pour aller se balader sur le sol, censé ne pas être au même niveau. A moins que vous utilisiez le script des niveaux de ASHKA à ce moment là, et vous pourriez utiliser la fonction « processus parallèle »). Arrivé ici, le héros devra sauter à nouveau afin de rejoindre le côté opposé.
Nous laisserons quand même le choix au joueur de sauter de l'autre côté ou bien de revenir sur ses pas. Créez donc une condition « Si touche x appuyée » et « Si touche y appuyée », x et y représentant les directions dans lesquelles se trouvent les deux parties reliées par l'objet en question par rapport au héros à ce stade du déplacement. Par exemple, gauche pour x, et droite pour y.
Suivant le choix du joueur, vous ferez donc sauter le héros dans la direction voulue et désactiverez l'interrupteur x.

Spoiler:

Si vous voulez que le héros puisse sauter dans les deux sens, il vous suffit juste de créer l'évènement gérant la vérification des variables, le premier saut et l'activation de l'interrupteur x des deux côtés de l'objet.

c) Passage à sauts multiples

Pour ne pas faire ultra-long, prenons un exemple avec deux piliers permettant de relier les deux côtés.
Quatre variables seront donc nécessaires: Deux pour les positions x de chacun des piliers, deux pour les positions y de chacun des piliers.
Un événement en processus parallèle devra être créé afin de vérifier constamment ces positions.

Spoiler:

Comme pour les systèmes précédents, un événement placé sur la case précédant le passage « saut » devra vérifier la valeur de ces variables avant de déterminer si le héros peut sauter ou non.
Vérifiez la valeur des variables gérant la position x et y des deux piliers.
Faites sauter votre héros sur votre pilier, et selon le pilier A ou B placé en premier, activez un interrupteur x ou y. (x pour A et y pour B)

Spoiler:

Créez une nouvelle page à chacun de vos piliers. Le premier ayant comme condition globale « interrupteur x activé » et le second ayant comme condition globale « interrupteur y activé ».
Chaque page étant en automatique, vous devrez tout d'abord vérifier le placement du second pilier (déterminé par l'interrupteur x ou y. Si c'est l'évènement x d'actif, alors il faudra vérifier le placement du pilier B.). Si le placement n'est pas bon, placez donc une condition « Touche x appuyée » (x déterminant la direction dans laquelle se trouve la case d'où vient le héros), puis faites sauter le héros. Si le placement est bon, placez deux conditions. La même que précédemment, si le héros souhaite retourner sur ses pas, et une autre, « condition Touche y » appuyée, y représentant la direction dans laquelle se trouve le second pilier. Faites ensuite sauter votre héros, activez l'interrupteur z ou w, selon le pilier d'où vous sautez (z si vous provenez du pilier A, w si vous provenez du pilier B) et désactivez l'interrupteur du pilier actif (x si A, y si B).


Spoiler:


Créez une nouvelle page à chacun de vos piliers, mettez la en « automatique ». La nouvelle page du pilier A aura comme condition d'activation « interrupteur z activé » et la nouvelle page du pilier B aura comme condition d'activation « interrupteur w activé ».
Les deux pages seront alors identiques; vous devrez créer deux conditions: « Si touche x appuyée » et « si touche y appuyée », x et y représentant les directions dans lesquelles le héros a le choix de sauter. Aucune vérification de variables est nécessaire, étant donné qu'arrivé au second et dernier pilier, nous sommes sûrs qu'ils sont tous correctement placés. Si vous créez un passage avec plus de deux piliers, une vérification de la position du troisième pilier est à ce moment nécessaire. Selon la direction choisie par le joueur, faites sauter votre héros. S'il retourne sur le pilier précédent, activez un interrupteur variant selon le pilier sur lequel vous êtes en ce moment. (si vous êtes sur le pilier B, activez l'interrupteur x et désactivez l'interrupteur z, et si vous êtes sur le pilier A, activez l'interrupteur y et désactivez l'interrupteur x).
S'il saute dans l'autre sens, désactivez l'interrupteur actif. Vous avez donc fini votre passage à sauts multiples.

Spoiler:


(Les noms des interrupteurs ne sont pas exactement les même sur les screens:
x= xA; y= yA, z= xB et w= yB)


Si vous voulez que le héros puisse revenir dans l'autre sens, vous aurez juste à ajouter une événement similaire au tout premier événement, mais avec les sauts et interrupteurs différents (x/y → z/w et droite/haut → gauche/bas).


III – Idées diverses

Tous les exemples que j'ai donnés ne sont pas très originaux. Grâce à cette technique, si vous en avez compris le principe, vous pourrez réutiliser les systèmes tels que celui du « Frimas » dans Golden Sun, ou encore des passages créés lorsque la marée est haute et que les plaques flottent à même hauteur que le mur d'en face, créant un passage si le héros les a déplacées correctement lorsque la marée était basse...
Bref, vous pouvez varier sur les idées.
J'ai conscience que ma technique n'est certainement pas la meilleure. Elle nécessite pas mal de variables/interrupteurs/pages d'évents. Le tout, c'est qu'elle marche. N'hésitez pas à donner la votre si vous en avez une plus courte et efficace.

Merci bien ^^,


TaZ

Post copié depuis http://rpg-maker-vx.bbactif.com/tutoriels-officiels-f133/tutoriel-passage-a-niveaux-event-t8583.htm#109782
avatar
ZangtherOld
Membre

Nombre de messages : 1711
Date d'inscription : 07/08/2009

Re: Tutoriel - Passage à niveaux [Event]

le Mar 11 Mai 2010 - 16:09
Un bon tuto, mais qui semble être passé inaperçu ... C'est quand même bien dommage.
Pourquoi ne pas ajouter une démo et des screens pour montrer le rendu in-game et un exemple de programmation ? Ça donnerait peut être l'occasion à des personne n'ayant pas le temps de reproduire ton tuto de voir ce que ça donne.

Merci du partage ^^
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum