| [résolu] bug déplacement player avec room de +640 de large. | |
|
|
Auteur | Message |
---|
chefgeorges Cliqueur Emérite
Nombre de messages : 502
Date d'inscription : 01/02/2008
| Sujet: [résolu] bug déplacement player avec room de +640 de large. Ven 21 Mar 2014 - 19:35 | |
| Bonjour et désolé pour ce titre mais je ne voyais pas comment exprimer mon problème en une phrase :'( Dans mon jeu (dans le niveau au Journal le Herald Harold) a un moment le personnage avance jusqu'à une région et là la caméra se déplace pour se caler sur un dialogue entres deux personnages. Voici le code : - Code:
-
function region1_Arrive() { cGeorges.Walk(765, 416, eNoBlock); while (cGeorges.x < 764) { SetViewport(GetViewportX() +5, 0); Wait(1);}
(dialogues...)
while (GetViewportX()> 475) { SetViewport(GetViewportX() -5, 0); Wait(1);} ReleaseViewport(); } Tout fonctionnait à merveille. Sauf que depuis que j'ai modifié le GlobalScript pour que le player avance dans la direction du clic de souris, le code précédent bug ! Le player effectue un demi-tour dès qu'il arrive sur la région Voici le code du GlobalScript : - Code:
-
function on_mouse_click(MouseButton button) // called when a mouse button is clicked. button is either LEFT or RIGHT { if (IsGamePaused() == 1) // Game is paused, so do nothing (ie. don't allow mouse click) { } else if (button == eMouseLeft) { ProcessClick(mouse.x,mouse.y, mouse.Mode); if (mouse.Mode == eModeWalkto) { player.Walk (mouse.x, player.y, eNoBlock, eWalkableAreas); } } else // right-click, so cycle cursor { mouse.SelectNextMode(); } } Mon avis c'est la redondance de la fonction "player.walk" (en cliquant je dis que le player dois aller aux coordonnées mouse.x et mouse.y, et en même temps je lui demande d'aller à des coordonnées différentes). Mais je sèche sur la résolution du problème...
Dernière édition par chefgeorges le Sam 22 Mar 2014 - 14:17, édité 1 fois |
|
| |
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu] bug déplacement player avec room de +640 de large. Sam 22 Mar 2014 - 9:35 | |
| Je ne sais pas trop comment t'aider... Tu aurais bien pu mettre un ClaimEvent, mais malheureusement on ne peut pas en mettre dans ce genre de fonctions. Sinon faire le 1er Walk en mode eBlock... |
|
| |
Atavismus Grand Cliqueur Royal
Nombre de messages : 1857
Localisation : France
Date d'inscription : 27/01/2014
| Sujet: Re: [résolu] bug déplacement player avec room de +640 de large. Sam 22 Mar 2014 - 10:47 | |
| Moi non plus, surtout que je ne suis pas sûr de comprendre. Si c'est ce que je crois, j'ai une éventuelle solution un peu bourrin : un booléen global qui conditionnerait le player.Walk Tu vois ce que je veux dire ? Les autres, ça vous parait une idée correcte ? |
|
| |
chefgeorges Cliqueur Emérite
Nombre de messages : 502
Date d'inscription : 01/02/2008
| Sujet: Re: [résolu] bug déplacement player avec room de +640 de large. Sam 22 Mar 2014 - 12:08 | |
| Je précise que c'est bien la ligne : - Code:
-
player.Walk (mouse.x, player.y, eNoBlock, eWalkableAreas); qui cause problème, car si je l'enlève ça fonctionne.
Autre précision : si j'enlève tout le code ci-dessus dans function region1_Arrive() et bien ça continue à bugger ! Il y aurait donc un blocage avec les régions ?? étrange...EDIT : ne pas en tenir compte, la vrai source du problème est surement en-dessous
Dernière édition par chefgeorges le Sam 22 Mar 2014 - 12:14, édité 1 fois |
|
| |
chefgeorges Cliqueur Emérite
Nombre de messages : 502
Date d'inscription : 01/02/2008
| Sujet: Re: [résolu] bug déplacement player avec room de +640 de large. Sam 22 Mar 2014 - 12:13 | |
| RETIF' ! Je crois avoir compris le noeud du problème ! En fait cette pièce est plus large (2 fois 640, 1280), et le perso ne bug pas en arrivant dans la région, mais tout simplement le jeu semble ne pas comprendre que la souris puisse pointer au-delà de 640 Je suis pratiquement sûr de mon fait, mais je n'ai aucune idée du pourquoi de ce problème ni de comment le résoudre ;p |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu] bug déplacement player avec room de +640 de large. Sam 22 Mar 2014 - 13:35 | |
| - chefgeorges (mes crochets) a écrit:
- Voici le code du GlobalScript :
- Code:
-
// [ ... ] player.Walk (mouse.x, player.y, eNoBlock, eWalkableAreas); - chefgeorges a écrit:
- En fait cette pièce est plus large (2 fois 640, 1280), et le perso ne bug pas en arrivant dans la région, mais tout simplement le jeu semble ne pas comprendre que la souris puisse pointer au-delà de 640
Je suis pratiquement sûr de mon fait, mais je n'ai aucune idée du pourquoi de ce problème ni de comment le résoudre ;p Solution : - Code:
-
// [ ... ] player.Walk (mouse.x+GetViewportX(), player.y, eNoBlock, eWalkableAreas); Ce qui est marrant c'est que tu utilises déjà GetViewportX dans les boucles que tu as mises dans la fonction correspondant à la région Par ailleurs la gestion des clics dans ton script global me dérange un peu sur le principe, parce que dans le cas où on clique en mode Déplacement tu appelles d'abord ProcessClick avec puis tu déplaces le personnage aux coordonnées du clic. Vu que généralement ProcessClick ne déclenche aucune action lorsqu'on lui passe le mode Déplacement ça ne devrait jamais poser problème, mais bon voilà, c'est bon de garder en tête que tu pourrais théoriquement avoir deux événements (celui correspondant à ProcessClick d'une part et le déplacement d'autre part) qui se déclencheraient lors d'un clic. |
|
| |
chefgeorges Cliqueur Emérite
Nombre de messages : 502
Date d'inscription : 01/02/2008
| Sujet: Re: [résolu] bug déplacement player avec room de +640 de large. Sam 22 Mar 2014 - 14:16 | |
| Wouah ! Kitai tu es définitivement mon idole lol Ça fonctionne parfaitement. J'avais imaginais cette solution mais sans penser à GetViewport (NB: Par contre, j'ai pas tout capté concernant ton explication sur ProcessClick) |
|
| |
Contenu sponsorisé
| Sujet: Re: [résolu] bug déplacement player avec room de +640 de large. | |
| |
|
| |
| [résolu] bug déplacement player avec room de +640 de large. | |
|