CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Lua - Fonctions imbriquées et paramètres

bloempje
bloempje
Niveau 19
19 août 2019 à 19:21:21

Bonsoir, j'essaie de faire un système de dialogue mais avant de le perfectionner je voudrais quelque chose qui marche. Mais ça marche pas. En l'occurrence j'ai une touche action qui va déclencher une conversation ou une ouverture de porte selon l'endroit ou la personne qui se trouve à proximité quand on appuie sur Entrée.

Mon problème c'est que je comprends pas le système de paramètres et que c'est probablement la cause de mon échec ici car quand j'appelle dialogue(npc_001()) tout seul ça marche mais quand j'appuie sur Entrée ça ne marche pas.

Voici le bout de code concerné : https://image.noelshack.com/fichiers/2019/34/1/1566234953-bloempje.png

Si quelqu'un peut m'aider s'il vous plait.

gorz94
gorz94
Niveau 6
19 août 2019 à 19:43:33

Première question: es-tu sur que le "code" le la touche Entrée est 'return', et pas 'Return' par exemple ?

Deuxième question: entre appuyer sur Entrée et appeler ton dialog(), la différence est qu'il y a un test fait. Est-ce que tu es sûr qu'il est valide ? Le problème vient probablement de là, je parle du long boolean "if hero.x > 0..."

bloempje
bloempje
Niveau 19
19 août 2019 à 19:58:54

Oui c'est bien return, j'ai modifié plusieurs fois mon code et des fois ça chashait quand j'appuyais sur Entrée.
J'avais aussi créé plusieurs lignes pour voir chacune des variable en temps réel donc de ce côté c'est bon.

Par contre je viens d'essayer de juste mettre dialogue(npc_001()) dans la fonction action et ça marche pas non plus.

zebtorax
zebtorax
Niveau 9
19 août 2019 à 23:03:59

Je ne pratique pas Lua mais normalement tu dois définir tes fonctions avant de placer ton code pour appuyer sur Entrée.

Grimmys
Grimmys
Niveau 19
20 août 2019 à 01:07:28

Il faut toujours définir ses fonctions avant de les appeler de toute façon.

Sinon, indente ton code l'auteur... Ça sera plus simple pour toi, et pour ceux qui t'aident... Sur un code petit comme ça on voit peut-être pas trop l'importance mais bon... :hap:

Enfin, revoie un cours pour les arguments d'une fonction (et l'appel avec argument) et sur la portée des variables, car là, même si ce que tu fais " fonctionne ".... C'est très mauvais. :(

hibloo
hibloo
Niveau 10
20 août 2019 à 11:26:54

Et est ce que tu appels bien tes fonctions dans love.update et love.draw ?

bloempje
bloempje
Niveau 19
20 août 2019 à 16:34:44

Le 19 août 2019 à 23:03:59 zebtorax a écrit :
Je ne pratique pas Lua mais normalement tu dois définir tes fonctions avant de placer ton code pour appuyer sur Entrée.

En fait elles étaient bien définies avant, c'est juste que mon code contenait beaucoup de lignes et il était réparti sur plusieurs fichiers .lua pour éviter de me retrouver avec 500 lignes illisibles.

Le 20 août 2019 à 01:07:28 Grimmys a écrit :
Il faut toujours définir ses fonctions avant de les appeler de toute façon.

Sinon, indente ton code l'auteur... Ça sera plus simple pour toi, et pour ceux qui t'aident... Sur un code petit comme ça on voit peut-être pas trop l'importance mais bon... :hap:

Enfin, revoie un cours pour les arguments d'une fonction (et l'appel avec argument) et sur la portée des variables, car là, même si ce que tu fais " fonctionne ".... C'est très mauvais. :(

On me dit d'indenter mais là j'ai retiré ce qui était superflu donc je vois pas quoi faire... mettre plus d'espace entre les lignes?
Pour les arguments des fonction j'allais le faire car j'ai pas le choix pour l'assimiler, mais en me jetant à l'eau j'irai plus vite j'ai toujours fait ça. Mais tu entends quoi par la portée des variables.

Le 20 août 2019 à 11:26:54 hibloo a écrit :
Et est ce que tu appels bien tes fonctions dans love.update et love.draw ?

Le problème venait de là. Pour déplacer un personnage grâce aux coordonnées (variables) c'est dans love.update par contre pour appeler ma fonction grâce à une touche il fallait mettre ça dans love.draw.

Je l'avais dans l'update en pensant que le programme allait vérifier constamment le statut de la touche Entrée (appuyé/non appuyé).

Merci à tous pour votre aide, jamais j'aurais pensé à ça et j'ai pas envie d'abandonner ou d'utiliser des librairies donc je comprends pas la logique.

hibloo
hibloo
Niveau 10
21 août 2019 à 02:15:43

Si tu peux transmettre l’intégralité de ton fichier je pourrai regarder en profondeur

bloempje
bloempje
Niveau 19
21 août 2019 à 16:20:48

C'est réglé grâce à toi donc je peux avancer.

Pour mon code j'ai rien à montrer pour l'instant. J'ai qu'un carré avec une tilemap et des animations. Là je fais le système de message après je pourrais enfin faire quelque chose de sérieux.

Là je finis car en fait on doit tout faire et ça implique plus qu'on aurait penser. Au début quand on appuie sur Entrée le message reste et on doit trouver un moyen de le faire disparaitre (avec love2d on pas pas défaire quelque chose dessiné avec love.draw), ensuite on s'aperçoit que le message est toujours le même, et enfin on doit faire en sorte que le message apparaisse lettre par lettre plutôt que directement (c'est là où j'en suis).

Merci encore :ok:

hibloo
hibloo
Niveau 10
22 août 2019 à 12:32:09

Super n’hésite pas à demander si tu as besoin d’aide :ok: j’ai programmé il y a quelques mois une sorte de console virtuelle qui affiche des messages lettre par lettre donc je pourrais éventuellement t’aider.

bloempje
bloempje
Niveau 19
22 août 2019 à 22:53:33

Non je vais essayer de me débrouiller pour le moment.

J'avais déjà réfléchi à un timer qui afficher les lettres une mais ce à quoi je pensais faisait appel à love.draw donc je me suis douté que quelque chose clochait :hap:

Mais apparemment en utilisant string.sub on peut isoler un caractère et ainsi faire des merveilles.
Mais comme je sais pas m'en servir je vais y réfléchir et tester ça sur des variables, valeurs d'un tableau et d'autres trucs.

Ce soir j'ai travaillé sur le fait de pouvoir ouvrir et fermer la boite de dialogue d'une seule touche. Ici le problème c'était que soit la fenêtre restait indéfiniment, soit elle disparaissait et je devais rester appuyé.

Mort de rire mais la source du problème c'est que j'ai fait l'inverse de mon problème d'avant : il fallait donc mettre mon activation/désactivation dans love.keypressed .

Demain, je m'attaque donc à l'affichage lettre par lettre.

bloempje
bloempje
Niveau 19
25 août 2019 à 18:41:33

Bonjour, j'ai un souci avec l'impression lettre par lettre. Il fonctionne mais qu'avec les caractères normaux.
SI je veux mettre un accent ça me met "UTF-8 decoding error : not enough space".

Sans utiliser :sub ça fonctionne. J'ai cherché sur Google mais c'est bien en UTF-8 sans BOM, ma police a bien le "é". Mais l'explication suivante parle d'un domaine où je comprend rien. Ce serait une histoire de byte, un caractère spécial en prend plusieurs alors que :sub n'en prend qu'un.

zebtorax
zebtorax
Niveau 9
25 août 2019 à 21:12:00

Un byte est un morceau de mémoire qui prend le moins de place en terme d'espace mémoire en tant que variable (moins qu'un string ou integer par exemple), il comprend 256 informations (entre 0 et 255), et donc peu gourmand pour le stockage.
Un caractère est convertie en hexadécimal puis en byte, d'où le fait que ton caractère spécial doit prendre plusieurs Byte pour espace mémoire. Je ne sais pas si cela peut t'aider, mais bon...

bloempje
bloempje
Niveau 19
26 août 2019 à 17:39:21

Ça m'aurait été utile si j'étais programmeur avancé mais là je peux rien en faire à part mettre l'information de côté. :desole:

Peu importe, je peux m'abstenir des caractères spéciaux, au pire j'ai l'anglais. C'est pas comme si j'avais prévu de l'utiliser en masse et en terme de création de jeu c'est pas une priorité.

J'y reviendrai quand même un jour.

Sujet fermé pour la raison suivante : Merci :)
Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment