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:29

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: [Moteur zs]Personnage qui te regarde quand tu te déplace 0 Membres et 1 Invité sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: [Moteur zs]Personnage qui te regarde quand tu te déplace  (Lu 1082 fois)
binbin
Guest


Courriel
« le: 23 Avril 2013 à 13:15 »

J'aimerais connaître la meilleure manière de faire en sorte qu'un personnage regarde ton héros quand tu te déplaces et ce peu importe la direction.

J'ai bien une idée de comment faire( comparer les coordonnées des deux persiste notamment) mais j'ai l'impression que c'est se compliquer pour rien. Une idée ?
Journalisée
Christopho
Administrateur
Héros
*
Offline Offline

Messages: 6 208


Mymy, je t'aime :)


WWW Courriel
« Répondre #1 le: 23 Avril 2013 à 13:37 »

L'idée est là. On peut cependant utiliser une méthode qui fait une partie du calcul, évitant ainsi plein de if : entity:get_angle(other_entity)

Dans le script de la map, périodiquement (donc à l'aide d'un timer), je vérifierais donc l'angle entre le PNJ et le héros.

Supposons que ton PNJ s'appelle "marine" : tu peux créer la fonction suivante dans ton script de map :
Code: [Select]
local function repeat_marine_direction_check()
  local angle_to_hero = marine:get_angle(hero)  -- Récupérer l'angle en radians entre le pnj et le héros.
  local direction4 = angle_to_direction4(angle_to_hero)  -- Obtenir la direction la plus proche parmi les 4 principales.
  marine:get_sprite():set_direction(direction4)

  -- Rappeler cette fonction dans 0.1 seconde.
  sol.timer.start(map, 100, repeat_marine_direction_check)
end

function map:on_started()
  repeat_marine_direction_check()
end
Remarque : le premier paramètre de sol.timer.start est la durée de vie de ce timer, dans notre cas la map. Quand Link change de map, le timer disparaîtra donc comme attendu.

La fonction utilitaire angle_to_direction4, qui convertit un angle en une direction arrondie, n'existe pas dans le moteur mais on peut l'écrire :
Code: [Select]
-- Convertit un angle en radians en l'une des 4 directions principales avec le bon arrondi :
-- 0 (est), 1 (nord), 2 (ouest) ou 3 (sud)
function angle_to_direction4(angle)
  return math.floor((angle_to_hero + math.pi / 4) / (math.pi / 2))
end
C'est là qu'on réalise à quoi servent les maths au lycée, en particulier la trigonométrie ^^

PS : pour info, les PNJ se tournent déjà automatiquement vers le héros quand le héros leur parle.
« Dernière édition: 28 Avril 2013 à 15:59 par Christopho » 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
Christopho
Administrateur
Héros
*
Offline Offline

Messages: 6 208


Mymy, je t'aime :)


WWW Courriel
« Répondre #2 le: 17 Août 2013 à 13:41 »

Dans Solarus 1.1, une nouvelle fonction entity:get_direction4(other) permet de simplifier le code :

Code: [Select]
local function repeat_marine_direction_check()
  local direction4 = marine:get_direction4_to(hero)  -- Obtenir la direction la plus proche parmi les 4 principales.
  marine:get_sprite():set_direction(direction4)

  -- Rappeler cette fonction dans 0.1 seconde.
  sol.timer.start(map, 100, repeat_marine_direction_check)
end

function map:on_started()
  repeat_marine_direction_check()
end
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
Pages: [1] Imprimer 
Forums Zelda Solarus  |  Jeux amateurs  |  Aide & support  |  Topic: [Moteur zs]Personnage qui te regarde quand tu te déplace
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