Retour à l'accueil
Accueil Aide Rechercher Calendrier Identifiez-vous Inscrivez-vous
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
25 Août 2019 à 01:10

Connexion avec identifiant, mot de passe et durée de la session
Règlement | Grades du forum | L'équipe de modération | Album photo | Chat
Rechercher:     avancée
Forums Zelda Solarus  |  Jeux amateurs  |  Aide & support  |  Topic: [Solarus 1.4.4] La commande de mouvement "target" 0 Membres et 1 Invité sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: [Solarus 1.4.4] La commande de mouvement "target"  (Lu 4836 fois)
Jerelink
Gerudo
*
Offline Offline

Messages: 2 261


Picture : SquidPuke


Courriel
« le: 11 Novembre 2015 à 23:24 »

Bonsoir a tous !

Je suis en ce moment en pleine phase de découverte de l'engine, après avoir suivi les tutos (v 1.4) de Christopho (Que je tiens d’ailleurs a féliciter pour ce travail remarquable). J'ai tenté l’expérience d'apprentissage seul en m'aidant de l'API, seulement, je me confronte a mon premier problème (Très certainement celui d'une longue liste)  :mrgreen: ).

J'ai tenté de faire quelque chose de simple, un pnj qui suit le héro et s’arrête prêt de lui. J'ai donc utilisé un petit bout de script comme celui-ci sur la map ou se situe le pnj :

Quote
function map:on_started()
  
  local m = sol.movement.create("target")
  m:set_speed(40)
  m:start(pnj_1)
  m:set_smooth(false)
end


Ce qui fonctionne, sauf que maintenant le pnj s’arrête a tout les obstacles (ce qui etait prévisible avec le "smooth".
J'ai donc tenté de contourner le problème en déclarant les positions X et Y du hero puis du PNJ et de créer une condition dans laquelle le smooth est "false" uniquement quand ces coordonnées s’assimilent (ce qui après réflexion, n'est possible que si le pnj arrive au coordonnées exactes en passant au travers du hero..).

Je suis donc confronté a ce petit souci que j'aimerais résoudre et je fais appel a vous qui utilisez ce logiciel.

Comment faire pour que la commande "target" se termine après être arrivé prêt du hero (ainsi que son animation de marche persistante) puis ensuite la redémarrer si le hero s'éloigne ?

Merci, bonne soirée !  :)
Journalisée
Christopho
Administrateur
Héros
*
Offline Offline

Messages: 6 208


Mymy, je t'aime :)


WWW Courriel
« Répondre #1 le: 12 Novembre 2015 à 00:33 »

Un moyen est de stopper le mouvement lorsque la distance entre le PNJ et le héros est inférieure à un certain seuil. Ce que tu peux vérifier dans pnj_1:on_position_changed() par exemple. Je fais cela dans Zelda Roth pour Zelda qui suit le héros dans le donjon 9. N'hésite pas à regarder le code ^^
Journalisée

Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus
Jerelink
Gerudo
*
Offline Offline

Messages: 2 261


Picture : SquidPuke


Courriel
« Répondre #2 le: 12 Novembre 2015 à 01:28 »

Ok, donc j'ai un peu regardé le code de Zelda ROTH, dans la façon don c'est programmé sa me parait plutôt complexe même si je sais a peu prêt ou mène le code de l'entité custom. "is_following_hero" est une variable ? Si tel est le cas ou a-t-elle était déclaré, sa me perturbe un peu ^^
Journalisée
Renkineko
Tokay
*
Offline Offline

Messages: 123



Courriel
« Répondre #3 le: 12 Novembre 2015 à 07:24 »

Non, is_following_hero est une méthode personnalisée : https://github.com/christopho/zelda_roth_se/blob/master/data/entities/zelda.lua#L123

Elle fait appel à une variable qui est "zelda_following" et qui est initialisée dans "zelda:hero_gone" et "zelda:follow_hero" :)
Journalisée


Jerelink
Gerudo
*
Offline Offline

Messages: 2 261


Picture : SquidPuke


Courriel
« Répondre #4 le: 12 Novembre 2015 à 19:03 »

Malheureusement je ne comprend pas chose a tout ceci.. J'ai l'impression que la tache s'avère plus rude que ce que j'ai pu imaginer.
Une méthode personnalisée c'est quoi ? Une entité custom ?

Je devrais peut être me pencher sur autre chose, sa me parait plutôt compliqué pour quelqu’un comme moi.
Journalisée
Christopho
Administrateur
Héros
*
Offline Offline

Messages: 6 208


Mymy, je t'aime :)


WWW Courriel
« Répondre #5 le: 12 Novembre 2015 à 20:07 »

Une méthode c'est une fonction. Renkineko veut juste dire que c'est une fonction définie en Lua. C'est-à-dire par tes scripts Lua et non par Solarus.
Journalisée

Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus
Jerelink
Gerudo
*
Offline Offline

Messages: 2 261


Picture : SquidPuke


Courriel
« Répondre #6 le: 12 Novembre 2015 à 20:14 »

D’accord, c'est plus clair, merci ;) ! Mais cette fonction n'existe pas dans l'API, non ? J'ai cherché sans trop trouver..
Journalisée
Renkineko
Tokay
*
Offline Offline

Messages: 123



Courriel
« Répondre #7 le: 12 Novembre 2015 à 20:36 »

L'API ne concerne que le moteur, donc non il n'y a pas d'API avec une fonction que tu écris toi-même. C'est une fonction que tu écris, tu lui fais faire ce que tu veux, tu lui donnes les paramètres que tu veux, comme dirait YuGiOh : à toi d'jouer. :)

Désolé si j'ai embrouillé avec mes termes techniques, c'est le souci quand on est développeur professionnel : on aime utiliser les termes précis et donc on évite les approximations xD J'irai m'auto-flageller pour avoir semé le doute au lieu d'aider, car c'est péché.
Journalisée


Jerelink
Gerudo
*
Offline Offline

Messages: 2 261


Picture : SquidPuke


Courriel
« Répondre #8 le: 12 Novembre 2015 à 20:51 »

Il n'y a pas de mal ! C'est pas facile de discuter d'un sujet comme celui ci avec quelqu’un qui a encore bien peu de notion même si dans l'ensemble je sais plus ou moins comment fonctionne une variable, une fonction, un tableau etc  ^_^.

Là ou je m'embrouille un peu en fait c'est qu'il ne me semblait pas possible de créer des "function" a partir de rien sans même une variable type :
Quote
local function blablabla()
. Du coup je cherche encore l'origine de
Quote
function zelda:is_following_hero()
Journalisée
Wouf
Hylien
*
Offline Offline

Messages: 1 116


C'est la faim !


Courriel
« Répondre #9 le: 12 Novembre 2015 à 21:14 »

C'est justement ce qu'ils entendent par "fonction créée en lua" : elle n'appartient pas à l'api, elle a été créée au sein du fichier lua, pour un usage local :)

Pour faire simple, le moteur Solarus utilise deux langages :
- le C++, complexe, pour les parties qui nécessitent de la performance (réservé à ceux qui améliorent le moteur).
- le Lua, plus flexible, pour l'élaboration des quêtes (pour les utilisateurs du moteur).
Ces deux langages permettent de coder tout et n'importe quoi, mais ils sont plus intelligemment utilisés de la sorte ^^

En tant qu'utilisateur du moteur, tu peux donc soit écrire tes propres fonctions en lua, soit appeler les fonctions lua de l'api (qui font pour la plupart appel au code C++).

Dans le cas présent, la fonction "function zelda:is_following_hero()" est une fonction rajoutée pour les besoins du script, elle n'appartient pas à l'api. Tu peux voir son contenu, sa définition, à la ligne 123.

La notation
Code: [Select]
function nomDeTaFonction(argument1, argument2, ..., argumentN)
...
end
est équivalente à la notation suivante :
Code: [Select]
nomDeTaFonction = function(argument1, argument2, ..., argumentN)
...
end

Le mot clef "local" ne s'utilise que pour limiter la visibilité d'une variable au bloc courant (corps de boucle, de condition, de fonction, ...) et permettre de réutiliser le même nom de variable à différents endroits sans conflit :)
Journalisée

Marre des pavés ? Marchez dans la boue!
ハハ、あなたは私の罠に落ちた!
Jerelink
Gerudo
*
Offline Offline

Messages: 2 261


Picture : SquidPuke


Courriel
« Répondre #10 le: 15 Novembre 2015 à 15:55 »

Effectivement voilà qui est plus clair  ^_^. Je pense que j'avais mal compris une chose qui va pas mal m'aider par la suite.
J'ai toujours cru qu'il fallait passer les "function" en local pour les créer soit même, il était impossible pour moi d'envisager la création une "function" si celle-ci n’était pas existante dans l'API.. C'est beaucoup plus clair, merci a tous ! ;)

Je vais tout de même me concentrer avant toutes choses sur les tutos de Chris en 1.2 même si certains comportent des problèmes de compatibilité avec la 1.4.4 .
Journalisée
Pages: [1] Imprimer 
Forums Zelda Solarus  |  Jeux amateurs  |  Aide & support  |  Topic: [Solarus 1.4.4] La commande de mouvement "target"
Aller à:  

Propulsé par MySQL Propulsé par PHP Powered by SMF 2.0.15 | SMF © 2006, Simple Machines LLC XHTML 1.0 Transitionnel valide ! CSS valide !
Zelda Solarus 2009Skin par Eidarloy
Solarus-Games