Posté le 15/07/2017 13:54
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 164 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 17/07/2019 20:15 | #
C'est beau la technnologie
Citer : Posté le 18/07/2019 08:12 | #
J'ai dit un truc intelligent ??
Bon dans tous les cas ça me parait trop dur pour moi…
Citer : Posté le 31/07/2019 12:59 | #
Je n'ai pas compris comment utiliser KEYEV_DOWN, KEYEV_UP etc... dans une codition pour savoir si une touche est pressée ou relachée par exemple
Citer : Posté le 31/07/2019 13:25 | #
...
int main()
{
int key = 0; //une valeur pour les stocker toutes et à des actions les lier
...
key= getkey().key; //récuperer la valeur de la touche actuellement préssée
if(key == KEY_UP)
{
//faire quelque chose si la touche KEY_UP etait appuyée lors du getkey().key
}
if(key != KEY_F1)
{
//faire quelque chose si F1 n'etait pas appuyée lors du getkey().key
}
}
Les touches possible
Citer : Posté le 31/07/2019 13:29 | #
Merci
Citer : Posté le 31/07/2019 13:31 | #
C'est pas tout à fait juste ça Kouhai. Il n'y a pas "la" touche actuellement pressée, ça n'existe pas. Plusieurs touches peuvent être pressées à la fois.
Pour utiliser les événements, tu dois utiliser pollevent() ou waitevent() (selon si tu veux attendre ou non quand aucun événement n'est disponible). Cela te renvoie un événement qui est une pression, une répétition, ou un relâchement de touche. En écoutant les événements dans une boucle, tu peux savoir quelle touche est actuellement pressée ou non.
Toutefois, c'est pas trivial à faire correctement et si un truc méchant se passe une touche peut rester appuyée dans ton application alors qu'elle ne l'est pas en vrai. Ce serait très moche.
À la place, il faut que je te donne accès au tableau de gint qui dit essentiellement quelles touches sont pressées ou pas à tout instant. J'ai un peu sauté un étage dans mon API en donnant directement getkey(), et je vais y remédier avec une fonction du type IsKeyDown(). Il est facile de faire des conneries avec une telle fonction, mais vous vous débrouillez. x)
Soit dit au passage, il y a une raison intéressante d'utiliser les événements au lieu de lire toi-même le clavier. Les événements sont produits même quand tu fais autre chose, et ils sont "situés dans le temps". Dans un key_event_t tu as un champ indiquant quand l'événement s'est produit. Cela veut dire que même si ton application lagge, les événements seront toujours lus dans les temps et le temps indiqué sera toujours valide. Donc même si tu rates des événements tu peux les analyser après coup. Typiquement pour les combos dans les jeux tu n'as pas envie qu'un lag sur le moteur graphique casse le combo du joueur - les événements l'empêchent, mais pas l'analyse manuelle.
Citer : Posté le 31/07/2019 13:38 | #
Si c'est pas la bonne méthode, c'est pas ma faute, j'ai copié sur gintctl
Citer : Posté le 31/07/2019 13:40 | #
Donc je dois faire:
if ((pollevent() == KEYEV_DOWN) && (getkey().key == KEY_LEFT)
{
x --;
}
par exemple ?
Citer : Posté le 31/07/2019 14:00 | #
Si c'est pas la bonne méthode, c'est pas ma faute, j'ai copié sur gintctl
gintctl ne prétend pas que key != KEY_F1 signifie "si la touche F1 n'est pas pressée" ni que l'information renvoyée est un instantané du clavier.
Donc je dois faire:
{
x --;
}
par exemple ?
Nah, surtout pas. pollevent() et getkey() sont des choses différentes. Tu utilises soit l'un soit l'autre mais surtout pas les deux. Tu as le choix entre deux niveaux, à savoir pollevent()/waitevent() d'un côté, et getkey() de l'autre, et tu ne dois pas les mélanger. Je prévois d'ajouter un troisième niveau où tu peux demander individuellement l'état de chaque touche.
Tu dois plutôt faire ça :
if(ev.type == KEYEV_DOWN && ev.key == KEY_LEFT)
{
x--;
}
if(...)
{
x++;
}
Note que je n'ai appelé pollevent() qu'une seule fois, c'est important ! De plus tu veux probablement appeler waitevent() à la place, enfin à toi de voir.
Citer : Posté le 31/07/2019 14:02 | #
gintctl ne prétend pas que key != KEY_F1 signifie "si la touche F1 n'est pas pressée" ni que l'information renvoyée est un instantané du clavier.
C'est pour ça que j'ai modifié les commentaire dans les if
Citer : Posté le 31/07/2019 14:02 | #
C'est toujours pas juste soit dit en passant.
Citer : Posté le 31/07/2019 14:07 | #
Je parlais au niveau de l'instantanéité. j'espére que ma valeur key reste la même entre l'appelle à la fonction getkey et son utilisation dans les if
mais c'est vrai que j'ai extrapolé pour key!=KEY_F1
Citer : Posté le 31/07/2019 14:20 | #
getkey() ne fait que défiler les événements que le driver clavier a produit dans le passé.
Si le programme a beaucoup de retard et que la file contient des événements très vieux, alors getkey() peut renvoyer KEY_F1 même après que la touche ait été relâchée. C'est généralement ce que tu veux parce que ça t'évite de perdre les inputs si ton programme a du retard.
Citer : Posté le 31/07/2019 14:31 | #
D'accord, c'est vachement plus intéressant que celui en basic casio
Citer : Posté le 07/03/2020 22:36 | #
J'y suis presque, tiens bon Lephe ...
J'ai un problème au niveau du build.
:: Making into build-fx
sh-elf-gcc -o build-fx/MoIsland.elf build-fx/src/main.c.o -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields -Wall -Wextra -Os -D FX9860G -m3 -I include -T fx9860g.ld -lgint-fx -lgint-fx -lgcc -Wl,-Map=build-fx/map
/home/*user*/****/****/gcc/lib/gcc/sh3eb-elf/9.2.0/../../../../sh3eb-elf/bin/ld: cannot open linker script file fx9860g.ld: Aucun fichier ou dossier de ce type
collect2: error: ld returned 1 exit status
Makefile:101: recipe for target 'MoIsland.g1a' failed
make: *** [MoIsland.g1a] Error 1
Citer : Posté le 07/03/2020 22:38 | #
Intéressant. Tu es sûr que tu as make install dans gint ? Si oui, j'aimerais voir ce que le configure a affiché, parce qu'il annonce où il a détecté le compilateur, ce qui décide du dossier d'installation de la lib et des linker scripts.
(Je suis sûr que t'as tapé make install parce que sinon il n'aurait pas pu trouver les headers au moment de compiler, mais "on sait jamais".)
Citer : Posté le 07/03/2020 22:45 | #
Alors oui j'ai bien fait make et make install dans build.cg.
J'ai essayé d'ajouter --prefix aussi au moment de configure, pour être sûr qu'il trouve bien les bons dossiers.
Configuration saved in Makefile.cfg, ready to make!
Citer : Posté le 07/03/2020 22:51 | #
Aaaah mais oui mais non. Ce n'est pas le même dossier. Enlève ce préfixe et laisse-le tenter de trouver tout seul le compilo.
Citer : Posté le 07/03/2020 22:58 | #
J'ai supprimé build.cg et tout recommencé :
$ cd build.cg
$ ../configure --target=fxcg50
No prefix specified, let's ask the compiler:
sh-elf-gcc --print-search-dirs | grep install | sed 's/install: //'
Got '/home/*******/****/Casio/gcc/lib/gcc/sh3eb-elf/9.2.0/'.
Configuration saved in Makefile.cfg, ready to make!
$ make
[ ... ]
$ make install
install -d /home/*******/****/Casio/gcc/lib/gcc/sh3eb-elf/9.2.0/
install libgint-cg.a -m 644 /home/*******/****/Casio/gcc/lib/gcc/sh3eb-elf/9.2.0/
install ../fxcg50.ld -m 644 /home/*******/****/Casio/gcc/lib/gcc/sh3eb-elf/9.2.0/
cp -r ../include/gint /home/*******/****/Casio/gcc/lib/gcc/sh3eb-elf/9.2.0//include
Mais j'ai toujours le même problème à la compilation via
Ca me parrait bizarre le double '/' avant 'include' à la dernière ligne du make install, sachant que la balise code l'interprète ici comme un commentaire, alors que dans mon terminal elle est bien collée au '9.2.0'
Citer : Posté le 08/03/2020 09:04 | #
Ah je vois. Ta nouvelle install est correcte. Mais tu as compilé pour Graph 90+E, alors que le tuto utilise la version mono.
Citer : Posté le 08/03/2020 09:21 | #
Parfait, ca marche mieux comme ça