AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



-27%
Le deal à ne pas rater :
-27% sur la machine à café Expresso Delonghi La Specialista Arte
399.99 € 549.99 €
Voir le deal

Partagez
 

 [ACE]événement "automatique"

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
heos
Noble Lv.8
Noble Lv.8
avatar


Masculin Inscrit le : 08/07/2009
Messages : 228

[ACE]événement "automatique" Empty
MessageSujet: [ACE]événement "automatique"   [ACE]événement "automatique" Icon_minitimeLun 2 Jan 2012 - 0:07



Avant toutes choses, je vous conseille de lire ce tutoriel "Analyse du terrain" Ce tutoriel est la pour vous montrer une autre façon de faire des évent, une façon qui peut vous aidez a supprimer certaine tache pénible comme le C/C de masse. Cela n'est pas très dure, si je vous demande "Comment associer un évent a un tile ?" Peu d'entre vous saurais me répondre. Ce n'est pas très compliqué pourtant et très pratique.

Je vais faire ce tutoriel de cette façons
Code #Note
Explication

Cet événement doit etre dans un événement commun en processus parallèle , il pourrait être sur une map mais perdrais beaucoup d’intérêt.
ça prendrait plus de temps que de C/C l’évent sur toute les case voulue mais avec l'effet sur tout le jeu , ça peut etre un gain de temps énorme.

Événement commun en processus parallèle
@>Variable Operation:[0001:J-X] = Player's Map X
@>Variable Operation:[0002:J-Y] = Player's Map Y
@>Conditional Branch:Button C is Being Pressed
     @>Conditional Branch:Player has Down#si Regarde vers le Bas
          @>Variable Operation:[0003:AE-X] = Variable [0001:J-x]
          @>Variable Operation:[0004:AE-Y] = $game_variables[2] + 1
          @>
     :    Branch End
     @>Conditional Branch:Player has Left#si Regarde vers la Gauche
          @>Variable Operation:[0003:AE-X] = $game_variables[1] - 1
          @>Variable Operation:[0004:AE-Y] = Variable [0002:J-Y]
          @>
     :    Branch End
     @>Conditional Branch:Player has Right#si Regarde vers la Droite
          @>Variable Operation:[0003:AE-X] = $game_variables[1] + 1
          @>Variable Operation:[0004:AE-Y] = Variable [0002:J-Y]
          @>
     :    Branch End
     @>Conditional Branch:Player has Up#si Regarde vers le Haut
          @>Variable Operation:[0003:AE-X] = Variable [0001:J-x]
          @>Variable Operation:[0004:AE-Y] = $game_variables[2] - 1
          @>
     :    Branch End
     @>
:    Branch End


On commence par stockée la position X et Y du héros sur la map.
Âpres cela on vérifie si la touche Action est pressée vu que s'est comme ça que les évents sont activés
On calcule Ensuite quelles sont les coordonnées de la case en face du héros pour cela on vérifie d'abord dans quelle direction il regarde.
On stocke les coordonnées du héros dans d'autres variables et les modifie pour obtenir celle voulue.

Pour rappel le point 0,0 se trouve en haut à gauche , donc
Regarde vers le haut = Y + 1
Regarde vers le bas = Y - 1
Regarde vers la gauche = X - 1
Regarde vers la droite = X + 1

Les coordonnées du héros sont calculée avant les autres données pour une raison, contrairement aux autres qui servent pour cet évent, elles peuvent servir pour beaucoup d'autre , il vaut mieux les avoir a jour.

Deja ça , pour ceux qui n'ont pas compris
@>Variable Operation:[0004:AE-Y] = $game_variables[2] + 1

Est la même chose que ça
@>Variable Operation:[0004:AE-Y] = Variable [0002:J-Y]
@>Variable Operation:[0004:AE-Y] += 1


J'utilise la première pour 2 raison
-Un gain de temps, ça va plus vite quand on est habituer
-Un gain de lisibilité
la ça ne change pas grand chose parce que les calcule est simple mais avec un plus compliqué et une ligne par opération.
Ce n'est pas très lisible

Mais une fois la position calculée , il faut bien en faire quelque chose donc complétons un peu cela.
@>Variable Operation:[0001:J-X] = Player's Map X
@>Variable Operation:[0002:J-Y] = Player's Map Y
@>Conditional Branch:Button C is Being Pressed
     @>Conditional Branch:Player has Down#Regarde vers le Bas
          @>Variable Operation:[0003:AE-X] = Variable [0001:J-x]
          @>Variable Operation:[0004:AE-Y] = $game_variables[2] + 1
          @>
     :    Branch End
     @>Conditional Branch:Player has Left#Regarde vers la Gauche
          @>Variable Operation:[0003:AE-X] = $game_variables[1] - 1
          @>Variable Operation:[0004:AE-Y] = Variable [0002:J-Y]
          @>
     :    Branch End
     @>Conditional Branch:Player has Right#Regarde vers la Droite
          @>Variable Operation:[0003:AE-X] = $game_variables[1] + 1
          @>Variable Operation:[0004:AE-Y] = Variable [0002:J-Y]
          @>
     :    Branch End
     @>Conditional Branch:Player has Up#Regarde vers le Haut
          @>Variable Operation:[0003:AE-X] = Variable [0001:J-x]
          @>Variable Operation:[0004:AE-Y] = $game_variables[2] - 1
          @>
     :    Branch End
     @>Conditional Branch: Script; $game_map.valid?($game_variables[3],$game_variables[4])
          @>Variable Operation:[00011:Tileset ID] = $game_map.tileset.id
          @>Acquire Position Information: [0005], Terrain Tag, Variable[0003][0004]
          @>Acquire Position Information: [0006], Event ID,Variable[0003][0004]
          @>Acquire Position Information: [0007], Tile ID(Layer 1),Variable[0003][0004]
          @>Acquire Position Information: [0008], Tile ID(Layer 2),Variable[0003][0004]
          @>Acquire Position Information: [0009], Tile ID(Layer 3),Variable[0003][0004]
          @>Acquire Position Information: [00010],Region ID,Variable[0003][0004]
          @>Conditional Branch: Variable [0006:EA-Event ID] == 0
               @>Conditional Branch: Variable [0011:Tileset ID] == 3
                    @>Conditional Branch: Variable [0009:EA-Layer 3] == 80
                         @>Display Text:-, -, Normal, Down
                             :                   :Voulez vouz dormir ?
                         @>Display Choice: [Oui, Non]
                             : When [Oui]
                               @>Fade-Out Screen
                               @>Play ME: 'INN', 100, 100
                               @>Wait: 300 Frames
                               @>Full Recovery: Entire Party
                               @>Fade-In Screen
                               @>
                             : When [Non]
                               @>
                             : Banch End
                        @>
                    :    Branch End
                    @>Conditional Branch: Variable [0009:EA-Layer 3] == 232
                         @>Display Text:-, -, Normal, Down
                             :                   :Une caisse de pomme de terre.
                         @>
                    :    Branch End
                    @>
               :    Branch End
               @>
          :    Branch End
          @>
     :    Branch End
     @>
:    Branch End


Commentons un peu les ajouts
     ...
     @>Conditional Branch: Script; $game_map.valid?($game_variables[3],$game_variables[4]) La position existe ?
     On stocke les information sur la position qui peuvent nous être utile.
          @>Conditional Branch: Variable [0006:EA-Event ID] == 0Si il n'y a pas d’évent
               @>Conditional Branch: Variable [0011:Tileset ID] == 3Si l'ID du tilleset est 3
                    @>Conditional Branch: Variable [0009:EA-Layer 3] == 80Si l'ID du tile est 80 (Haut du premier lit)
                    Événement
                    :    Branch End
                    @>Conditional Branch: Variable [0009:EA-Layer 3] == 232Si l'ID du tile est 80 (caisse de pomme de terre)
                    Événement
                    :    Branch End
                    @>
               :    Branch End
               @>
          :    Branch End
          @>
     :    Branch End
     @>
:    Branch End


Le principe est simple:
on vérifie si la position est valide pour éviter les mauvaises surprises.
on vérifie l'ID du tileset
on vérifie l'ID du tile et applique l’événement si elle est correcte

Si vous l'avez fait, vous pouvez le tester en affichant du texte par exemple mais vous vous rendrez compte qu'il reste un problème.
Vous n'avez pas le temps de relâcher la touche action que le message revient, pour contrer cela nous allons mettre une condition en plus.

La condition
@>Conditional Branch: Script; not $game_message.busy? || $game_message.visibleSi aucun message,choix est actif
     Tous ce qu'on a fais jusqu’à présent
:    Else
     @>Wait: 30 Frames#Attendre 1/2s pour laisser un peu plus de temps
     @>
:    Branch End


Pour palier a cela il faut vérifier qu'aucun message ou choix soit actif mais ça ne suffit pas.
pour laisser un peu plus de temps au joueur on stop l’événement pendant 1/2 seconde.
suffisamment de temps pour que le joueur puisse lâcher la touche mais pas assez pour qu'il puisse activé un autre évent.

Voila la fin , s'est largement améliorable par exemple
une deuxième façon de supprimer l’évent par défaut avec une région pour éviter de mettre trop d'event la ou ce n'est pas nécessaire si il faut en désactive beaucoup sans en mettre d'autre.

ou encore une gestion des couches
Si pas d’évent => couche 3
si pas d’évent par défaut => couche 2
si pas d’évent par défaut => couche 1

Enfin le principe est expliqué , à vous de faire selon vos préférence.

Revenir en haut Aller en bas
Nusenism
Nomimange'twa ♪
Nomimange'twa ♪
Nusenism


Masculin Age : 33
Inscrit le : 02/02/2010
Messages : 4692

[ACE]événement "automatique" Empty
MessageSujet: Re: [ACE]événement "automatique"   [ACE]événement "automatique" Icon_minitimeLun 2 Jan 2012 - 11:42

Sympa, l'utilité du concept est minime (sauf gameplays particuliers, etc) mais ça peut faire gagner du temps sur le long terme.
L'idée aussi, fallait y penser.

+3 points de participation et je déplace. Merci Heos!
Revenir en haut Aller en bas
http://imagin.jeunforum.com/portal.htm
 

[ACE]événement "automatique"

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» Comment faire pour activer un évènement si l'évenement regarde le héros, mais cette évènement change de direction.
» Activation d’évènement commun dans une zone de rayon constant avec, pour centre un évènement mobile
» [Résolu] événement au contact d'un autre événement ?
» Course automatique
» Envent Automatique

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Tutoriels :: Tutoriels Vx Ace-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Cookies | Forum gratuit