Problèmes sur Gint
Posté le 23/11/2020 16:39
Bonjour !
Je crée ce topic pour parler de plusieurs problèmes que j'ai sur gint.
Déjà il y avait
ce topic sur lequel j'avais mis un problème. J'arrive maintenant à le reproduire, le bug ne se produit que quand :
-J'ouvre l'add-in
- Je reviens au menu
- J'éteins ma calculatrice
- Je la rallume
- Je reviens sur l'add-in
- Je clique sur une touche ( n'importe laquelle)
Tout cela sans ouvrir un autre add-in.
Autre problème : j'ai ce code :
#include <gint/display.h>
#include <gint/keyboard.h>
#include <gint/gint.h>
#define bool int
#define true 1
#define false 0
int main(void)
{
extern bopti_image_t img_Vaisseau;
int key = 0;
int x = 0;
int yballe = 150;
dclear(C_WHITE);
bool isFinish = false ;
while(!isFinish){
dclear(C_WHITE);
dimage(x, 150,&img_Vaisseau);
dupdate();
key = getkey().key;
if(key == KEY_EXIT)
gint_osmenu();
if(key == KEY_LEFT)
x = x-10;
if(key == KEY_RIGHT)
x = x+10;
if(key == KEY_SHIFT)
yballe = 150;
while(yballe != 0)
dclear(C_WHITE);
dtext(x,yballe,C_BLACK,"|");
yballe = yballe-1;
}
getkey();
return 1;
}
Quand je vais sur mon add-in, je ne peux plus le quitter, et les touches ne font plus effet( comme un freeze)
Je suis obligé de reset ma calculatrice.
Si vous avez des idées, je suis preneur !
Merci !
Citer : Posté le 23/11/2020 16:42 | #
Aaaah mais d'accord. Ça c'est connu. Le mécanisme d'extinction (ce qui inclut la veille automatique) fait des choses bizarres auxquelles gint n'est pas préparé. C'est un crash sur tous les modèles, pour l'instant je ne peux rien y faire. Quand tu es dans l'application la veuille automatique est désactivée donc ce risque n'existe pas.
Le problème avec ton code est que la boucle while(yballe != 0) n'est pas dans le if(key == KEY_SHIFT) parce que tu n'as pas mis d'accolades autour du if. Donc en fait elle est exécuté à tous les tours. De plus, seul le dclear() est dans la double parce que la aussi tu n'as pas mis d'accolades. Donc en fait dès que tu rentres dans l'add-in il lance le while et comme ce while ne modifie pas la valeur de yballe puisque ça c'est après le while, il tourne à l'infini sur ce dclear().
Citer : Posté le 23/11/2020 16:45 | #
Ah d'accord ! Je trouvais ca bizarre aussi de ne pas mettre d'accolades, mais vu que sur un tutoriel Gint j'avais vu un while avec une seule instruction sans accolade je pensais que ca s'appliquait à tous les whiles ! Merci !
Citer : Posté le 23/11/2020 16:47 | #
Oui donc si tu ne mets pas d'accolades ça ne « capture » qu'une seule instruction, c'est pour alléger le code. Ça marche avec tous les blocs (if/else/do/while/etc).
Citer : Posté le 23/11/2020 16:51 | #
Merci !
Bon, maintenant il faut que je comprenne pourquoi le "|" ne part pas ...
Ajouté le 23/11/2020 à 16:52 :
Enfin je veux dire n'avance pas, il se passe rien quand je fais Shift
Citer : Posté le 23/11/2020 16:53 | #
Il faut appeler dupdate() pour rafraîchir l'écran.
Mon blog ⋅ Mes autres projets
Citer : Posté le 23/11/2020 16:53 | #
Ah mais oui je suis bête !
Citer : Posté le 23/11/2020 16:54 | #
Du reste si tu comptes faire un jeu un peu subtil avec des choses qui bougent à plusieurs endroits en même temps, je t'invite à séparer les entrées du dessin et de la logique temporelle. Crois-moi, ça t'aiderait beaucoup. Il y a un exemple dans le tutoriel d'utilisation de gint le jour où tu te sens de tenter ça.
Citer : Posté le 23/11/2020 16:56 | #
Bah en fait disons que je comprends vraiment pas le code du tutoriel n2 de Gint, il faut que je m'y replonge plus en détails
Ajouté le 23/11/2020 à 17:00 :
Bon et bien non, avec ca :
if(key == KEY_SHIFT)
{
yballe = 150;
while(yballe != 0)
{
dclear(C_WHITE);
dtext(x,yballe,C_BLACK,"|");
yballe = yballe-1;
dupdate();
}
}
, quand je fais Shift il ne se passe rien ...
Citer : Posté le 23/11/2020 17:05 | #
C'est parce que getkey() utilise SHIFT pour former des combinaisons genre Shift+VARS→PRGM. Tu peux désactiver cette option dans getkey_opt() qui est la vraie fonction (getkey() c'est juste getkey_opt() avec les options par défaut).
C'est écrit dans la doc tout ça (même si d'accord c'est pas évident que ton problème se situe au niveau du getkey()).
Citer : Posté le 23/11/2020 17:07 | #
Merci pour ta réponse mais j'obtiens : error: too many arguments to function 'getkey' lors du make
Citer : Posté le 23/11/2020 17:11 | #
Oups pardon pardon il faut appeler getkey_opt() pas getkey(). C'est ce que j'avais dit au-dessus.
Citer : Posté le 23/11/2020 17:14 | #
Meme chose : error: too few arguments to function 'getkey_opt'
Citer : Posté le 23/11/2020 17:17 | #
Je sais pas comment te le dire subtilement : jette un oeil à la doc. x3
Citer : Posté le 23/11/2020 17:18 | #
C'est vrai...Maintenant il faut que je la trouve...
Ajouté le 23/11/2020 à 17:19 :
Ah voilà !
Ajouté le 23/11/2020 à 17:21 :
Ah non... dans le depot Gint/doc il y a bopti.md or pas de getkey_opt par ici
Ah ... https://gitea.planet-casio.com/Lephenixnoir/gint/src/commit/58db663ae63857693711a15df412503add1b0fec/include/keyboard.h
int maxcycles ??? Le nombre max de ... quoi ???
Citer : Posté le 23/11/2020 17:32 | #
T'as été cherché un truc vieux dis donc ! Regarde plutôt simplement dans le dossier include : https://gitea.planet-casio.com/Lephenixnoir/gint/src/branch/master/include/gint
Le wiki n'a pas de détails sue l'API malheureusement, bien tenté
Citer : Posté le 23/11/2020 17:32 | #
Non non mais t'inquiéte pas, j'ai modifié mon message regarde !
Ajouté le 23/11/2020 à 17:44 :
En somme je comprends pas "int maxcycles"...
Citer : Posté le 23/11/2020 17:47 | #
Non non mais t'inquiéte pas, j'ai modifié mon message regarde !
Tu as peut-être modifié ton message mais tu es toujours à côté de la plaque, alors que (1) je t'ai dit que t'étais devant un document très vieux, (2) j'ai précisé où il fallait chercher, et (3) en plus le message d'erreur du compilateur te donne le prototype de la fonction.
getkey_opt() ne prend plus de int maxcycles en paramètre depuis longtemps. Va chercher la doc à jour et là tu pourras commencer à demander comment ça marche.
Citer : Posté le 23/11/2020 17:49 | #
Bein, tu m'a dis d'aller dans Include, j'y suis allé, et il y a marqué ca !
Ajouté le 23/11/2020 à 17:55 :
Ah mais nooooon, j'étais sur un commit !
Alors, Timeout, was ist ?
Citer : Posté le 23/11/2020 18:00 | #
On progresse... doucement mais sûrement.
Qu'est-ce que c'est ? Posé comme ça c'est une mauvaise question. As-tu tenté de chercher la traduction ? As-tu remarqué qu'il y a un paragraphe entier qui en parle juste au-dessus ? As-tu consulté le tutoriel d'utilisation de gint pour voir comment on l'utilise ?
Fais 15 secondes de pause et réalise que chaque fois que tu postes un message la personne qui t'écrit (aujourd'hui c'est moi) se coupe dans ce qu'elle fait pour t'aider et apporter une réponse. De ton côté les réponses ont peut-être l'air d'arriver gratuitement mais c'est loin d'être le cas. Donc avant de poser une question tu dois chercher et tester, et inclure dans ta question ce que tu as cherché, trouvé, pas compris, testé, et observé. Ou bien poser ta question à un bot, s'il peut te donner une réponse qui te satisfait...
Citer : Posté le 23/11/2020 18:11 | #
Mais... ca marche
Merci beaucoup !