| [GML] Problème de déplacements | |
|
|
Auteur | Message |
---|
Knuckle Nouveau
Messages : 7
| Sujet: [GML] Problème de déplacements Sam 12 Déc 2015 - 22:32 | |
| Bonjour à tous,
Je viens à vous car je débute avec le logiciel Game Maker Studio et je suis face à un premier problème que je n'arrive pas à résoudre malgré des recherche via google. Ou du moins je ne sais pas quel énoncé mettre pour avoir une réponse concrète.
Bref je vous explique mon problème : Dans mon jeu, qu'on pourrait qualifier de jeu de gestion, je cherche à envoyer mes paysans chercher du bois en coupant des arbres. Je crée donc un événement Step, je crée mon script et je rentre ceci:
while instance_exists(obj_Arbre) { move_towards_point(obj_Arbre.x, obj_Arbre.y, 10) }
Je vous passe les lignes avec la variable qui rajoute la ressource "bois". Mais en gros il devrait couper du bois jusqu'à ce qu'il n'y est plus d'objets "arbre" sur le terrain.
Mon problème c'est qu'ils effectuent la tache qu'une seule fois, ou plutôt, la boucle s’enchaîne bien avant qu'il est atteint le premier arbre et du coup il continu tout droit jusqu'à sortir du terrain... J'aimerai donc que ma boucle "while" reprenne seulement une fois qu'il a coupé son arbre afin de passer au suivant puis au suivant etc... Si cela peut vous paraître plus clair j'aimerai un déplacement jusqu'à l'arbre en question et pas un déplacement dans la direction de l'arbre. Merci d'avance pour votre aide ! |
|
| |
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: [GML] Problème de déplacements Dim 13 Déc 2015 - 11:05 | |
| Tu sembles mal comprendre comment fonctionne la boucle while. L'évènement STEP est répété à chaque frame du jeu, donc si tu veux effectuer une action en boucle, c'est le bon évènement, là tu as bien compris. Par contre, la boucle while est répétée au sein de la frame courante. Tant que la condition est vraie, il effectuera les instructions, et tant que tu ne sors pas de la boucle, il ne passe pas à la frame suivante. Pour résoudre le soucis, tu n'as qu'à remplacer la boucle while par un if. Etant dans un event step, la condition sera répétée X fois par secondes (X étant le nombre de frames/Seconde défini par room_speed) |
|
| |
Knuckle Nouveau
Messages : 7
| Sujet: Re: [GML] Problème de déplacements Dim 13 Déc 2015 - 11:55 | |
| Salut et tout d'abord, merci de ta réponse, j'avais effectivement mal compris quelque chose mais c'était plus au sujet de la répétition du Step =D. J'ai donc réussi à résoudre mon problème en passant en même temps par des alarmes. Je vous link donc cela: - Code:
-
if mouse_check_button_pressed(mb_left) { if show_question("voulez vous couper du bois?") { alarm[0] = 1 } exit }
if alarm[0] = 1 { if (instance_exists(obj_Arbre))
{ move_towards_point(obj_Arbre.x, obj_Arbre.y, 10) alarm[0] = 0 }
else { alarm[0] = 0 action_move("000010000",0) exit }
}
La question que je me pose maintenant c'est: Est ce la bonne manière de procéder pour arriver au résultat attendu ou, d'après vous, est ce que j'aurai du faire autrement? Et si oui, comment? |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [GML] Problème de déplacements Dim 13 Déc 2015 - 12:04 | |
| Bah en fait aucun interet d'utiliser une alarm, ça sert pas vraiment a ça a la base mais plus a déclencher un event d'alarm. La tu peux tout simplement créer ta propre variable de condition et l'utiliser. Genre goto_cut_wood: - Code:
-
if mouse_check_button_pressed(mb_left) { if show_question("voulez vous couper du bois?") { goto_cut_wood = true } exit }
if(goto_cut_wood) // identique a if(goto_cut_wood == true) { if (instance_exists(obj_Arbre))
{ move_towards_point(obj_Arbre.x, obj_Arbre.y, 10) goto_cut_wood = false }
else { goto_cut_wood = false action_move("000010000",0) exit }
} Penses juste a declarer ta variable dans create: goto_cut_wood = false |
|
| |
Knuckle Nouveau
Messages : 7
| Sujet: Re: [GML] Problème de déplacements Dim 13 Déc 2015 - 13:32 | |
| Super, j'ai donc modifié mon code et j'en ai donc profité pour lire des tutos sur les "alarm" que j'avais mal compris.
Merci beaucoup du coup de main ! |
|
| |
Knuckle Nouveau
Messages : 7
| Sujet: Re: [GML] Problème de déplacements Dim 13 Déc 2015 - 15:06 | |
| Ah ben me voilà confronté à un nouveau problème que je ne sais résoudre... J'ai eu envie que mon personnage s’arrête, donne des coups de hache sur l'arbre, qu'une fois terminé l'objet "arbre" se détruise et qu'il reparte faire la même chose sur le suivant. Pour cela j'ai crée une timeline qui donne ça (c'est plus simple de vous donner le récapitulatif des informations): - Code:
-
Step 0: execute code:
action_move("000010000",5)
scale the sprite with 1 in the xdir, 1 in the ydir, rotate over 45, and no mirroring
Step 30: scale the sprite with 1 in the xdir, 1 in the ydir, rotate over 0, and no mirroring
Step 60: scale the sprite with 1 in the xdir, 1 in the ydir, rotate over 45, and no mirroring
Step 90: scale the sprite with 1 in the xdir, 1 in the ydir, rotate over 0, and no mirroring
Step 120: scale the sprite with 1 in the xdir, 1 in the ydir, rotate over 45, and no mirroring
Step 150: scale the sprite with 1 in the xdir, 1 in the ydir, rotate over 0, and no mirroring
execute code:
goto_cut_wood = true
for other object: destroy the instance
Je fais appel à cette timeline dans l'événement collision de mon personnage contre l'arbre. Le problème est que, une fois l'arbre touché la timeline fait la première action (que j'ai du mettre à la Step 0 pour que sa fonctionne) mais il n’enchaîne pas sur les autres. Si je comprend bien le soucis, Game Maker me considère en collision avec l'arbre en permanence et donc il relance la timeline instantanément, ce qui empêche le bon déroulement des opérations. Avez vous une solution pour régler ce soucis? |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [GML] Problème de déplacements Dim 13 Déc 2015 - 17:19 | |
| - documentation a écrit:
- timeline_index Index of the time line associated with the instance. You can set this to a particular time line to use that one. Set it to -1 to stop using a time line for the instance. Note that this does not start the time line. For this use the variable timeline_running.
En gros, verifie bien que la timeline_index est bien a -1: if(timeline_index == -1) { // lancer la timeline ... |
|
| |
Knuckle Nouveau
Messages : 7
| Sujet: Re: [GML] Problème de déplacements Dim 13 Déc 2015 - 19:27 | |
| Ah super effectivement sa résout bien le problème, je veux bien une explication d'ailleurs de cette phrase afin de comprendre ce que je fais exactement ?
Je la repost en Français : timeline_index Index de la ligne de temps associée à l'instance. Vous pouvez modifier cet index pour utiliser une position particulière de la ligne de temps. Réglez cet index à -1 pour arrêter l'utilisation de la ligne de temps affectée à l'instance.
Qui plus est, j'ai un nouveau problème toujours vis à vis de cette timeline, à la fin de cette dernière je demande donc un destroy_instance(other) mais, finalement c'est mon personnage qui disparaît et pas l'arbre.C'est comme si le personnage ne se considérait plus comme étant en collision avec l'arbre.
J'ai donc essayé plusieurs chose: Dans un premier temps de changer la position de la timeline > echec Puis de changer le other par obj_Arbre > echec (tout les arbres de la map disparaissent) j'ai tenter de faire avec un with(other) et with(obj_Arbre) > echec j'ai crée une variable sur l'arbre "hp_arbre" que j'ai initialisé à 3 et qui normalement devrait descendre à chaque "coup de hache" donné dans la timeline > echec
Bref même si je pense que c'est un soucis sur la detection de la collision entre l'arbre et le personnage pendant la timeline, je ne sais absolument pas comment résoudre le problème. Avez vous une solution? |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [GML] Problème de déplacements Dim 13 Déc 2015 - 20:32 | |
| Il faut que t'utilises une variable pour mémoriser l'id de l'arbre avec lequel tu es en collision, pour pouvoir l'utiliser dans la timeline.
Car une fois l'event de collision terminé (donc quand la timeline est lancée) bah other deviens effectivement invalide.
Sinon timeline_index c'est juste une variable qui te permet de savoir quelle timeline est associée a ton instance. Tout fonctionne par id, et -1 indique en gros "id invalide" (donc pas de timeline associée).
Tu peux utiliser draw_text ou le debug mode pour visualiser des variables d'instances, histoire de mieux comprendre. |
|
| |
Knuckle Nouveau
Messages : 7
| Sujet: Re: [GML] Problème de déplacements Lun 14 Déc 2015 - 2:57 | |
| Voilà mon problème est donc résolu et tout fonctionne comme je le voudrai, ce qui va être assez simple pour reproduire la même chose avec les autres ressources. J'ai pu jeter un bon coup d’œil aux instances et à leurs id.
Merci pour les conseils, sa m'aide vraiment beaucoup, car c'est pas toujours évident. |
|
| |
Knuckle Nouveau
Messages : 7
| Sujet: Re: [GML] Problème de déplacements Mar 15 Déc 2015 - 4:50 | |
| Me voilà de retour pour un nouveau problème ! (je ne recrée pas un post pour chaque soucis sinon on va pas s'en sortir)
J'essaie maintenant de travailler sur ma carte. J'aimerai pouvoir faire défiler ma carte de gauche/droite/haut/bas au clavier mais je ne trouve pas de solution.
J' ai essayé de mettre un sprite invisible au centre de ma carte et de le faire suivre par la caméra, sur le papier, ça marche et ma caméra suit mon sprite invisible. Problème sur cette méthode, c'est que, quand mon sprite invisible arrive sur les bords de la carte, il continu mais la caméra s’arrête, ce qui rend se système inutile. De plus je pense qu'avec cette façon de faire j'aurai des problèmes par la suite pour pouvoir améliorer tout ça.
Ensuite j'ai essayé, et c'est là tout le soucis, de gérer avec les views... Mais les views et moi on est pas copain. Je pensais qu'un simple view_xview[0] += 10 en appuyant sur la douche droite de mon clavier marcherai mais ce n'est pas le cas...
Donc on en arrive à ma question, pour faire un défilement de map contrôlé au clavier, quelle est la meilleure solution? Et surtout comment la mettre en place pour que ça marche? Tout en pensant à la suite, car je pense mettre à terme, une minimap en bas à droite de mon écran où l'on pourra cliquer pour renvoyer la caméra au lieu indiquer.
|
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [GML] Problème de déplacements Mar 15 Déc 2015 - 9:45 | |
| Refaire un topic est pas forcement plus mal selon le problème, si le titre possède les bons mots clés ça peut éventuellement aider après une recherche via l'outil adapté :p (même si y a pas grand monde qui fait des recherches mais bon..)
Pour la view, view_xview[0] += 10 devrait fonctionner. Si ce n'est pas le cas tu dois avoir une instance en focus de la view, du coup elle se recentre dessus juste après. Ou si ce n'est toujours pas ça, tu n'as pas du activer ta view en cochant les bonnes cases dans le room editor.
|
|
| |
Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: [GML] Problème de déplacements Mar 15 Déc 2015 - 13:08 | |
| La recherche sur le fofo est difficile, il faut les mots exacte du topic sinon il trouve rien |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [GML] Problème de déplacements Mar 15 Déc 2015 - 16:18 | |
| Ou un des mots, si le topic a le bon nom ou les bons tags ça roule sans soucis. |
|
| |
Contenu sponsorisé
| Sujet: Re: [GML] Problème de déplacements | |
| |
|
| |
| [GML] Problème de déplacements | |
|