AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [Résolu]Teleportation

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Cristalnoir14
Pas mal
avatar

Messages : 30

MessageSujet: [Résolu]Teleportation    Mar 20 Jan 2015 - 17:02

Hello,
en cherchant sur le forum concernant les téléportations d'objets, je n'ai pas trouvé la réponse à ma question!
Explication:
Je suis dans une Room, et je dirige un personnage type objet. J'ai créé des objets "EXIT" sur un coté, je mets ma souris dessus "Control + clic Droit", creation code.
CA va? on me suit?

Le problème:
Mon objet "EXIT" est à gauche au bord de la room et je souhaite, lorsqu'il y a collision avec moi, etre téléporter dans une autre room mais à doite, room style zelda. En gardant les valeurs Y.
Cette méthode sera appliqué pour le bas, le haut et la gauche.
Je suis nul en programmation, si je pouvais avoir des explications précises. Merci d'avance.


Dernière édition par Cristalnoir14 le Mer 21 Jan 2015 - 16:50, édité 1 fois
Revenir en haut Aller en bas
red-error
Utilisateur confirmé: Rang ****
avatar

Messages : 1015
Projet Actuel :

MessageSujet: Re: [Résolu]Teleportation    Mar 20 Jan 2015 - 18:30

Si tes rooms ont toute la même taille et les portes à la même place, (je suppose que ton héro est coché persistant entre les room), c'est assez simple.
Tu peux avoir 4 objets exit différents (pour les 4 directions), dans le creation code tu dis à l'exit à quelle room il doit aller (stocker le nom de la room dans une variable)

Chaque objet exit change juste le X ou le Y du héro en collision tout en changeant la room.
Par exemple un exit au nord mettra la position du héro en hero.y=room_height-64 ou quelque chose comme ça (en bas),
et fera un goto vers sa room attribuée (une variable que tu aura initialisé dans le création code)
Un mur à gauche fera hero.x=room_width-64; un mur à droite fera hero.x = 32

Si tu as plusieurs objets exit d'un même type tu peux utiliser with(nom_de_objet)self.variable=room0 pour initialiser la variable pour tous au lieu d'un seul.

Si tu dois recréer le héro à chaque room, tu dois retenir sa position avant de changer de room dans des variables globales et le remettre à sa place au début de la room par exemple, et du coup le exit ne fait que changer ces variables avant de changer de room (global.HEROX=hero.x; global.HEROY=room_height-64)

Pour débuter et gagner du temps c'est toujours une excellente idée de réduire le nombre de fonctionnalités et simplifier au maximum pour ne garder que l'essentiel.
Spoiler:
 
Revenir en haut Aller en bas
hofmeister
Bavard


Messages : 109

MessageSujet: Re: [Résolu]Teleportation    Mar 20 Jan 2015 - 21:30

Bonjour,
Je pense pas qu'il vaille mieux faire une room pour chaque pièce, a priori ce serait mieux de combiner plusieurs pièces par room, parce que si le jeu en comporte beaucoup ça va être galère. La première chose à faire c'est de mettre l'objet représentant le joueur en persistant.
Par exemple tu peux faire 4 objets exit_haut,... ayant pour parent un objet EXIT. Si toutes les pièces ont la même largeur et hauteur, on peut mettre dans le create event: id.modifix=0;id.modifiy=-n; pour l'objet exit_haut, n étant la hauteur d'une pièce.
Il faut faire la même chose pour les 3 autres objets, en assignant les valeurs selon la modification de coordonnées voulue.
Ensuite, dans l'event collision de l'objet parent: (j'ai mis collision_object pour l'objet qui représente le joueur, je connais pas la fonction qui l'identifie) (il doit y avoir une fonction pour suivre un objet dans une view, mais je connais pas trop)
Code:
if collision_object==o_joueur
{
     vrx=collision_object.x+id.modifix;
     vry=collision_object.y+id.modifiy;
     if (vrx>=0)&&(vrx<room_width)&&(vry>interface_haut_height)&&(vry<room_height-interface_bas_height)
         {
          collision_object.x+=((collision_object.x-floor(room_width/longueur_piece))*2);
          collision_object.y+=((collision_object.y-floor((room_height-interface_haut_height-interface_bas_height)/largeur_piece))*2);
          view_xview[refvjeu]+=id.modifix;
          view_yview[refvjeu]+=id.modifiy;
         }
}
Après c'est du pseudo-code, ça implique aussi d'avoir activé les views, refvjeu est le numero de la vue de jeu définie
dans les views de la room. J'espère que je ne me suis pas trop trompé. interface_haut_height est la largeur de l'interface en haut, comme il faudra afficher des infos de toutes façons dans d'autres views...
Sinon pour changer de room, il faut 4 objets exi_room avec dans le create event les mêmes variables, pour gauche par exemple:
id.modifix=-1;id.modifiy=0;
Il faudra instancier manuellement ces objets,dans le creation code de la room par exemple:
instance_create(x,y,exi_room_g);id.refr=nomDeLaRoom;

Leur parent aura dans le collision_event:(toujours pareil, il faut definir collision_object avant)
Code:
if collision_object==o_joueur
{
    vrx=room_width-collision_object.x-floor(room_width/longueur_piece)*id.modifix;
    vry=room_height-interface_bas_height-collision_object.y-floor((room_height-interface_haut_height-interface_bas_height)/largeur_piece))*id.modifiy;
    if (vrx>0)&&(vry>0)
    {
     collision_object.x=vrx
     collision_object.y=vry+interface_haut_height;
     room_goto(id.refr);
     break;
    }
    if (vrx>0)&&(vry<0)
    {
     collision_object.x=vrx;
     collision_object.y=room_height-interface_bas_height+vry;
     room_goto(id.refr);
     break;
    }
    if (vrx<0)&&(vry<0)
    {
     collision_object.x=room_width+vrx;
     collision_object.y=room_height-interface_bas_height+vry;
     room_goto(id.refr);
     break;
    }
    if (vrx<0)&&(vry>0)
    {
     collision_object.x=room_width+vrx;
     collision_object.y=interface_haut_height+vry;
     room_goto(id.refr);
     break;
    }
}
Bon j'ai compliqué et embrouillé le sujet mais ça pourrait être une piste pour éviter d'avoir plein de rooms.
Par contre il doit y avoir plein de fautes.
Revenir en haut Aller en bas
Cristalnoir14
Pas mal
avatar

Messages : 30

MessageSujet: Re: [Résolu]Teleportation    Mer 21 Jan 2015 - 16:18

Oui mes rooms sont toutes de la meme dimension. Mon héro est "persistent".
1-Je vise la méthode de red-error. C'est celle ci que je veux réaliser mais j'ai du mal à la mettre en pratique, je rappelle que j'ai horreur du code. Le but est de créer un seul objet Exit et éviter d'en avoir 1000 en les reliant entre eux.
Cette méthode permet d'en avoir qu'un seul et d'attribuer un code à chaque objet dans chaque room (voir "create code").
2-Je sais aussi qu'il est possible de créer un code général dans la room et "si objet est a tel endroit (x et y) alors le teleporter vers la room avec coordonnées x et y.
mais la c'est une autre méthode.

A savoir qu'il y aurra énormement de room etant donné qu'il s'agit d'un zelda like.
Je vais essayer la méthode de red-error.
Hofmeister, ta méthode me parait un peu + complexe. En + il faut créer plusieurs objets "EXIT" si g bien compris.
Revenir en haut Aller en bas
Cristalnoir14
Pas mal
avatar

Messages : 30

MessageSujet: Re: [Résolu]Teleportation    Mer 21 Jan 2015 - 16:47

Nickel j'ai reussi. Merci.
Topic résolu.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: [Résolu]Teleportation    

Revenir en haut Aller en bas
 
[Résolu]Teleportation
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Crime résolu....
» [résolu]Sous quel corps d'arme servait-il ?
» [résolu] Connaitre les individus conduisant du SOSA 1 au SOSA n
» Dégraissant
» [résolu]impossible de publier un fichier .ged

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: