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.