Bienvenue visiteur !
|
Désactiver la neige
Statistiques
Liste des membres
Contact
Mentions légales
253 connectés actuellement
30834988 visiteurs depuis l'ouverture
2255 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
◂
| Téléportation aux bords de la map en un seul événement
Pour remplacer les événements de téléportation envahissant les bords d'une map par un seul, en utilisant Mémoriser l'emplacement. | Ecrit par Perséphone le 22/08/2007 |
▸
|
❤ 0 Ce tutoriel est valables pour toutes les versions de RM à partir de RM2000, à la différence que contrairement aux opus suivants, RM2000 et 2003 ont une commande dédiée pour enregistrer les coordonnées du héros dans des variables en une commande, là où il vous faudra vous reporter à Modifier une variable pour les autres :
Commande de RM2000 et 2003.
- Ce qu'on voit d'habitude -
Comment fait-on, lorsqu'on atteint le bord d'une map, pour téléporter sur une autre map? En général, on se retrouve avec le bord de ces 2 maps tartiné d'événements :
On a là 59 événements. Vous vous retrouvez donc à faire du copier-coller sur tout le bord de la map, en modifiant à chaque fois le point de téléportation. Assez gonflant, non?
- Ce qu'on va faire -
Alors effacez-moi tout ça et ne gardez qu'un seul événement, sur la 1ère map, qu'on appellera "Map 1".
Mettez-le dans un coin de votre map, en Processus Parallèle, Au dessus ou Sous le héros afin qu'il n'interfère pas avec le jeu.
Parfait, on va pouvoir passer à la prog maintenant. Mémorisez la position du héros ds des variables appelées respectivement "ID map", "X map", "Y map".
A présent, admettons que map 1 fasse 20 sur 15 et que vous souhaitez envoyer votre personnage sur la map 2 (qui fait la même taille), et ce sur tout le bord droit (sur le dessin, de tout l'encart jaune de map 1 vers celui de map 2).
Lorsque votre personnage se trouve sur l'une des cases de la dernière colonne de la map 1, il a pour coordonnées Y=(un nombre quelconque) X=19 (en effet, la première colonne compte pour 0). Puisque votre événement parallèle enregistre ces coordonnées, Y map=(nombre quelconque), X map=19 et ID map=1 (<- le numéro de la map).
A l'inverse, les coordonnées des points d'arrivées sur la colonne gauche de la map2 sont Y=(nombre quelconque), X=0 et ID=2.
Nous allons alors donner les deuxièmes coordonnées comme position mémorisée à la base, afin que lorsqu'on reviendra à la position mémorisée elle correspondra aux coordonnées d'arrivée et non à celles de départ.
Mettez dans l'événement une fourchette de conditions :
Citation: <>Si variable (X map) 19
<>Variable(s): (X map) =, 0
<>On ne change pas Y
<>Variable(s): (ID map) =, 2
<>Attendre 0,2 sec. ( sinon à peine le bord du charset et non du personnage aura touché une case de la colonne qu'il sera téléporté. Il faut lui laisser le temps de terminer son pas.)
<>Revenir à la position: ID (ID map), X (X map), Y map (Y)
<>Fin |
Normalement, depuis n'importe quel point de la colonne de coordonnée X=19 vous devriez arriver sur la case correspondante sur l'autre map.
A présent nous allons nous occuper du retour.
Créez un événement parallèle sur la deuxième map et mettez-y la même chose que précédemment, en utilisant les mêmes variables :
Citation: <>Mémoriser la position : ID (ID map), X (X map), Y (Y map)
<>Si variable (X map) 0
<>Variable(s): (X map) =, 19
<>On ne change pas Y
<>Variable(s): (ID map) =, 1
<>Attendre 0,2 sec.
<>Revenir à la position: ID (ID map), X (X map), Y map (Y)
<>Fin |
Voilà! Notre système de téléportation simplifié est fait, ce qui vous permet d'économiser un max d'événements! Normalement, tout fonctionne à merveille et quand votre héros arrive au... Quoi ? Un bug ?
En effet: vous remarquerez sans doute qu'une fois votre personnage arrivé sur la 2e map, il fait immédiatement demi-tour et se retrouve téléporté sur la première map qui le retéléporte à nouveau sur la 2e et ainsi de suite. C'est tout simplement que lorsqu'il arrive sur l'autre map, il se retrouve "détecté" par l'autre événement de téléportation qui se déclenche. C'est pourquoi il nous faut modifier légèrement les coordonnées, pour qu'il arrive une case plus loin:
Dans l'événement de la map 1:
Citation: <>Si variable (X map) 19
<>Variable(s): (X map)=, 1")
<>On ne change pas Y
<>Variable(s): (ID map) =, 2
<>Attendre 0,2 sec.
<>Revenir à la position: ID (ID map), X (X map), Y map (Y)
<>Fin |
Dans le 2e:
Citation: <>Mémoriser la position : ID (ID map), X (X map), Y (Y map)
<>Si variable (X map) 0
<>Variable(s): (X map)=, 18
<>On ne change pas Y
<>Variable(s): (ID map) =, 1
<>Attendre 0,2 sec.
<>Revenir à la position: ID (ID map), X (X map), Y map (Y)
<>Fin |
C'est réglé ! Ce système marche également à la verticale où là ce sont les Y que vous devez modifier et laissez intacts les X.
- "Et si mes deux maps ne font pas la même taille ?" -
Ce système de téléportation se complexifie un peu si vos maps ne sont pas de la même taille. En effet vous devrez calculer la différence de coordonnées qui existent entre les deux maps. Je vous donne un exemple:
Ma map1 fait 40 sur 40 tandis que ma map2 en fait 25 sur 25, qui est un pont, et qui se situe à droite de ma première carte.
Je souhaite que lorsque mon personnage se retrouve sur le point de s'engager sur la pont, il s'y téléporte. Je devrais donc me retrouver avec cet événement:
Citation: <>Mémoriser la position : ID (ID map), X (X map), Y (Y map)
<>Si variable (X map) 39
<>Variable(s): (X map)=, 1
<>Je ne change pas Y
<>Variable(s): (ID map) =, 2
<>Attendre 0,2 sec.
<>Revenir à la position: ID (ID map), X (X map), Y map (Y)
<>Fin |
Mais le problème, c'est que puisque ma map2 fait 25x25 et la première 40*40, si mon personnage a Y≠zone d'interface entre les 2 maps (si y vaut plus de 25), le point d'arrivée n'existe pas et donc le programme plantera ^^'. Et si, dans la première map, le personnage n'a rien pour être bloqué (zone jaune), je risque de le retrouver dans l'eau lorsqu'il passera sur la 2e map (par exemple).
Alors comment faire ? Simplement limiter la zone de téléportation au début du pont avec les coordonnées. Bien sûr, s'il n'y a que 2 cases à configurer, on peut utiliser la façon de faire traditionnelle, mais cela pourra vous servir pour exclure d'autres endroits, comme par exemple, empêcher le joueur de terminer sur le mur d'une maison qui ne commence que sur la deuxième map.
Attention !
- primo, nous n'allons plus utiliser la fonction "=" en ce qui concerne le changement de X et maintenant de Y mais "-" ou "+"
- secundo, étant donné la différence de taille des maps, le pont n'est pas considéré comme étant aux mêmes coordonnées:
Coordonnées du début du pont (map1): Y=(19 et 20)
Coordonnées de la suite du pont (map2): Y=(13 et 14)
Citation: <>Mémoriser la position : ID (ID map), X (X map), Y (Y map)
<>Si variable (X map) 39
<>Si variable (Y map) 19 ou plus
<>Si variable (Y map) 20 ou moins (<- vous pourriez mettre "=" tant que vous y êtes, mais il s'agit vraiment de chercher à délimiter une zone qui pourrait être plus grande)
<>Variable(s): (X map)= -, 38
<>Variable(s): (Y map)= -, 6 (<- 19 - 13 = 20 - 14 = 6)
<>Variable(s): (ID map) =, 2
<>Attendre 0,2 sec.
<>Revenir à la position: ID (ID map), X (X map), Y map (Y)
<>Fin
<>Fin
<>Fin |
Pour le retour vous inversez: vous soustrayez au lieu d'ajouter et vice-versa.
Ouf enfin fini !
Ce système peut être utilisé dans de nombreux cas, à vous de faire preuve d'imagination !
Je dois avoir fait le tour, si vous avez un problème ou que vous voulez que je vous aide pour des cas particuliers, n'hésitez pas à le dire ici !
Mis à jour le 4 février 2021.
|
Bastienre4 -
posté le 07/07/2008 à 20:50:14 (21 messages postés)
| Petit Maker ^^ | bai moi je trouve beaucoup de simple le copier coller enfin apres c mon avid
|
J'apprends le C++ (c'est pas gagner :F) |
Youhouy -
posté le 14/08/2008 à 09:09:20 (5 messages postés)
| | Super !! Seulement il faudrait que ça marche remarques je sais pas ce que tu veux dires par ''Mémoriser la position'' et ''Revenir à la position'' (J'utilises VX c'est pas 1 soucis?)
|
Mastermanu (visiteur non enregistré) -
posté le 31/08/2008 à 23:47:16
| Désolé mais je n'ai pas bien compris où je dois aller pour placer les variables et ect...
ça serait sympa de placer les screens des commandes de l'event.
Surtout pour des débutants sachant se servir de Rpg maker.
|
peron -
posté le 25/09/2008 à 12:26:54 (97 messages postés)
| Loumia pour paques ! | Merci pour le tut aux pouets!!!
Après une ptite galère por comprendre toutes ces variables Citation: Youhouy - posté le 14/08/2008 à 09:09:20. (5 messages postés)
Super !! Seulement il faudrait que ça marche remarques je sais pas ce que tu veux dires par ''Mémoriser la position'' et ''Revenir à la position''
|
Voilà ce que fait (ya peut etre moyen d'optimiser mais bon....):
Pour "mémoriser" il faut:
-créer un evt commun qu'on nomme "memo position hero" par exemple."processus parrallèle" déclanché par le premier événement activé lors du jeux, comme ça l'événement fonctionne tout le temps.
-dedans on "gère une variable" que l'on nomme "position X hero" égale à "événement":cocher "position X" du "zhéros". O.K
-on gère une autre variable qu'on nomme "position Y hero" égale à "événement":cocher "position Y" du "héros"
-on gère la dernière variable qu'on nomme "position ID hero" égale à "autre": cocher "ID carte"
-cliquer sur O.K..et fermer les evts communs.
Ceci permet de "charger les variables de position du héros tout le temps du jeu.
Sur la carte concernée par la pseudo télétransportation, dans l'événement créer pour ça. On appelle l'événement commun "memo position hero", on copie colle le tuto là haut et voilà.
|
lloyd-attak -
posté le 11/10/2008 à 12:19:00 (3 messages postés)
| | Comment on fait pour memo l'endroit ou est le perso svp parce que je trouve pas...
|
catchoun -
posté le 30/11/2008 à 16:06:42 (20 messages postés)
| | Bravo, c'est tout simplement génial et ça aide bien... juste un ch'tit événement dans un coin et le tour est joué pour maîtriser toutes les téléportations dans tous les sens
Merci beaucoup, ça m'a été très très utile
|
c'est un jour de perdu que celui où tu n'as pas souri |
bowlde -
posté le 03/04/2009 à 19:56:21 (3 messages postés)
| | j'aimerais juste savoir si ça marche sur RMvx et comment parce que je suis perdu la -_-...
|
Tata Monos -
posté le 04/04/2009 à 06:54:18 (28 messages postés)
| Compte Non utilisé | oui
|
bowlde -
posté le 04/04/2009 à 11:29:43 (3 messages postés)
| | Comment on fait pour VX ou xp je comprends rien meme avec 2003
|
Florior742 -
posté le 12/09/2009 à 17:06:55 (41 messages postés)
| | Excellent tuto, pour relier de grandes maps ^^ De plus, cette technique est également un excellent exercice de variables, et j'ai trouvé de cette façon des tas d'autres situations pour appliquer ton tuto ^^
|
Ulquiorra -
posté le 03/10/2009 à 20:51:14 (1913 messages postés)
| | Super tuto, grâce à lui, tous mes téléports d'une map tiennent en un seul event !
Et oui, moi aussi, je vois bien d'autres pistes possibles (planchers piégés, bruitages localisés, toussa ...)
Merci donc >w<
|
Alioune -
posté le 02/11/2009 à 11:10:41 (25 messages postés)
| | Merci beaucoup, génial ton tuto!
Gain de temps énorme, possibilité de modification rapide(surtout si on veux modifier, par exemple, le bruit de téléport des 50 événements...), gain de place pour les évènements (pages moins fouillies), possibilités multiples, possibilité de marcher là où il y avait anciennement les évent de téléportation(Condition : si le héros regarde vers ...), Programmation pas très compliquée, et surtout, je le répète GAIN DE TEMPS ÉNORME! MERCI!
Bonne continuation! A+
|
SPIDer++ -
posté le 05/01/2010 à 19:00:07 (13 messages postés)
| Débutant en Making, C, et Pascal, également Araignée qui poste plus vite que son ombre | Pour ceux qui ont Vx et qui comprennent pas:
Créez Trois Variables: ID Map, X Map, et Y Map.
Créez l'event en parallèle, au dessous du héros.Puis rentrez:
>Opération : Variable [0002 : ID Map] = ID de la carte
>Opération : Variable [0003 : X Map] = Héros : Coordonnée X
>Opération : Variable [0004 : Y Map] = Héros : Coordonnée Y
[Pour gauche/droite:]
>Condition : Si Variable [0003 : X Map] == 0*Tlp A gauche* 19*A droite*
> Opération : Variable [0002 : ID Map] = *ID de la carte où vs voulez aller*
>Opération : Variable [0003 : X Map] = *Indiquez la coord. X ou vs voulez aller*
>Opération : Variable [0004 : Y Map] = *Indiquez la coord. Y ou vs voulez aller*
>Attendre 10 Frames *ou 20, à vs de voir*
>Teleporter l'équipe : ID: [0002], X: [0003], Y: [0004]
>
|Fin Condition
>Condition : Si Variable [0004 : Y Map] == 0*Tlp En haut* 19*En bas*
>*Mettez la portion de code qui est à l'intérieur de l'autre condition*
|Fin condition
>
N.B.:Tout ce qui est entre astérisques est commentaire.
N.B.2: La valeur 19 concerne seulement l'exemple du tuto, une map de 100*100 ce sera 99...
N.B.3:Mettez 0 pour en haut/à gauche ou 19 pour en bas/à droite, question condition.Vous n'arriverez pa à mettre les deux
En espérant que vous comprendrez,
Votre tout sauf dévoué SPIDer++
P.S.:Il faudra mettre un event comme ça pour chaque carte, après à vous de vous adapter
P.S.2:Au fait, merci pour ce tuto, c'est ce qu'il me fallait!
|
C'est en Makant qu'on devient Maker, et en disant des trucs débiles qu' on devient diseur de trucs débiles...comme moi XD |
chyro -
posté le 29/01/2010 à 14:26:59 (93 messages postés)
| la légende revient | joli tuto mais quelqu'un pourrait il m'expliquer comment l'adapter pour XP pliz?
|
tampaxor -
posté le 11/06/2010 à 11:33:40 (10274 messages postés)
| | Pratique ça ! Si ça continue, je me remets à maker pour le fun !
|
reelie -
posté le 23/10/2010 à 22:07:29 (35 messages postés)
| Marine | Ce n'est rien d'autre que compliqué !
|
Hell, it's about time ! |
| (très) jeune maker | euh copier coller je pense que c'est mieu
|
j'ai la flemme d'écrire une signature... |
|
|
|