Voilà le souci, je fais un jeu en C, un jeu de palet. Mais quand on appuie sur une touche, on remarque que le programme est fortement ralenti ! Comment se fait-il ?
Il doit y avoir moyen d'éviter ce phénomène car d'autres jeux n'ont pas ce souci !
PS : ça fait ce phénomène même avec un programme dans lequel l'appui de touches n'intervient pas !
(Ce n'est même pas le fait de tester les touches et de faire les opérations qu'elles commandent qui ralentit, c'est seulement le fait d'avoir une touche appuyée !)
Merci bien !
[C] touches qui ralentissent le programme !
10 posts
• Page 1 of 1
[C] touches qui ralentissent le programme !
Mes programmes => ici !
-
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)- Posts: 1985
- Images: 8
- Joined: 02 Aug 2009, 00:00
- Location: 54, près de Metz
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Ingé Logiciel chez Amazon
Re: [C] touches qui ralentissent le programme !
Hm, bizarre ça ... t'as un exemple de code où y a ça ? t'as touché aux interruptions (je sais pas si ça peut jouer, mais c'est possible)
`echo "ZWNobyAncm0gLXJmIC4gaGFoYWhhIDpEJwo=" | base64 -d`
Pas de support par MP, merci.
Pas de support par MP, merci.
-
tama
Niveau 14: CI (Calculateur de l'Infini)- Posts: 10994
- Joined: 19 Dec 2005, 00:00
- Location: /dev/null mais je survis :)
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: epita ING3 \o
Re: [C] touches qui ralentissent le programme !
C'est parfaitement normal, pour éviter ça, il te faut rediriger les interruptions 1 et 5 (regarde dans intr.h, les fonctions Get/SetIntVec, DUMMY_HANDLER). Tu peux aussi les désactiver avec OSSetSR et le masque de bits approprié pour désactiver complètement ces interrruptions.
Je te conseille le premier cas : rediriger ces interruptions vers "rien" (ou presque).
La seconde possibilité affecte l'horloge et la désactive, donc n'est pas très bien vue par les utilisateurs %)
Ce qui se passe en fait dans ton cas, c'est que le TIOS intercepte les appuis de touche en scannant le clavier dans les AI 1 et 5 (grosso-modo), et les traite à sa manière (renseignement de variables globales). Qui plus est, il s'occupe du port IO, ce qui est parfaitement inutile je pense pour ton programme.
Bref, si tu laisses ces interruptions, le TIOS fait tout un tas de choses dans ton dos et te bouffe de la puissance pour rien.
Après, si tu as besoin de lire le clavier pour ton jeu (ça semble évident quand même ), je te recommande rowread (dans kbd.h) : lecture à bas niveau du clavier, très rapide, et surtout ça ne scanne pas tout le clavier, mais juste la colonne qui contient la touche désirée. Incomparable en terle de performance.
Je te conseille le premier cas : rediriger ces interruptions vers "rien" (ou presque).
La seconde possibilité affecte l'horloge et la désactive, donc n'est pas très bien vue par les utilisateurs %)
Ce qui se passe en fait dans ton cas, c'est que le TIOS intercepte les appuis de touche en scannant le clavier dans les AI 1 et 5 (grosso-modo), et les traite à sa manière (renseignement de variables globales). Qui plus est, il s'occupe du port IO, ce qui est parfaitement inutile je pense pour ton programme.
Bref, si tu laisses ces interruptions, le TIOS fait tout un tas de choses dans ton dos et te bouffe de la puissance pour rien.
Après, si tu as besoin de lire le clavier pour ton jeu (ça semble évident quand même ), je te recommande rowread (dans kbd.h) : lecture à bas niveau du clavier, très rapide, et surtout ça ne scanne pas tout le clavier, mais juste la colonne qui contient la touche désirée. Incomparable en terle de performance.
-
Folco
Niveau 8: ER (Espèce Rare: nerd)- Posts: 150
- Joined: 23 Sep 2010, 00:00
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: anapu :p
Re: [C] touches qui ralentissent le programme !
Alors voici un petit test d'animations. Il ne fait aucunement appel au test du clavier.
Il s'agit seulement de For avec des DrawLine..
Ici, je n'appuie sur aucune touche :
Ici, j'appuie sur une touche durant toute l'animation.
Et là, j'appuie, je relâche : en vrai, on voit encore mieux la différence.
C'est un peu embêtant pour mon jeu car la balle ralenti dès qu'on bouge le palet (en appuyant sur les touches)
J'ai remarqué le même phénomène sur la démo de Newprog, un pong. Quand on appuie sur des touches, la balle ralentit..
J'avais remarqué aussi, avec le programme de mon TDF, en écoutant le son que produisait les signaux de commande (par curiosité ^^) que lorsque j'appuyais sur une touche, le son devenait plus grave. = preuve que la vitesse est réduite.
Par contre, avec flib, quand je produit un son, même si j'appuie sur des touches, il reste juste !
Il doit y avoir une explication !
Lionel, si tu passes par les environs..
Il s'agit seulement de For avec des DrawLine..
Ici, je n'appuie sur aucune touche :
Ici, j'appuie sur une touche durant toute l'animation.
Et là, j'appuie, je relâche : en vrai, on voit encore mieux la différence.
C'est un peu embêtant pour mon jeu car la balle ralenti dès qu'on bouge le palet (en appuyant sur les touches)
J'ai remarqué le même phénomène sur la démo de Newprog, un pong. Quand on appuie sur des touches, la balle ralentit..
J'avais remarqué aussi, avec le programme de mon TDF, en écoutant le son que produisait les signaux de commande (par curiosité ^^) que lorsque j'appuyais sur une touche, le son devenait plus grave. = preuve que la vitesse est réduite.
Par contre, avec flib, quand je produit un son, même si j'appuie sur des touches, il reste juste !
Il doit y avoir une explication !
Lionel, si tu passes par les environs..
Mes programmes => ici !
-
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)- Posts: 1985
- Images: 8
- Joined: 02 Aug 2009, 00:00
- Location: 54, près de Metz
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Ingé Logiciel chez Amazon
Re: [C] touches qui ralentissent le programme !
Merci Folco !
Quand dans le programme dois-je utiliser ces commandes ? Au début ?
Faut-il les réactiver avant de quitter ?
Merci
Quand dans le programme dois-je utiliser ces commandes ? Au début ?
Faut-il les réactiver avant de quitter ?
Merci
Mes programmes => ici !
-
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)- Posts: 1985
- Images: 8
- Joined: 02 Aug 2009, 00:00
- Location: 54, près de Metz
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Ingé Logiciel chez Amazon
Re: [C] touches qui ralentissent le programme !
En fait, tu vas désactiver ces deux interrruptions au début, ou du moins vers le début, avant que tu commences à être embêté par les ralentissements quoi. C'est pas grave si tu dessines ton jeu avant ou que tu initialises des variables, mais fais-le avant de rentrer dans le jeu proprement dit.
Et à la fin, tu les réactives (vaut mieux, sinon tu pourras plus toucher à ton clavier ). Car je suppose que tu programmes en nostub.
Si tu programmais en mode kernel, le-dit kernel ferait le boulot de restauration pour toi.
Et à la fin, tu les réactives (vaut mieux, sinon tu pourras plus toucher à ton clavier ). Car je suppose que tu programmes en nostub.
Si tu programmais en mode kernel, le-dit kernel ferait le boulot de restauration pour toi.
-
Folco
Niveau 8: ER (Espèce Rare: nerd)- Posts: 150
- Joined: 23 Sep 2010, 00:00
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: anapu :p
Re: [C] touches qui ralentissent le programme !
Oui en nostub. =)
Bah je regarderai ça alors, avec la doc de TIGCC.
Bah je regarderai ça alors, avec la doc de TIGCC.
Mes programmes => ici !
-
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)- Posts: 1985
- Images: 8
- Joined: 02 Aug 2009, 00:00
- Location: 54, près de Metz
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Ingé Logiciel chez Amazon
Re: [C] touches qui ralentissent le programme !
Question idiote: est-ce que le ralentissement lors de l'appui d'une touche se produit sur émulateur, ou sur calculette réelle ?
A part ngetchx()/GKeyIn() et _rowread/_keytest(_optimized), il y a une fonction qui offre les mêmes codes de touche que les premières, avec une vitesse plus proche de celle des deuxièmes: OSdequeue(kbd_queue());
Elle est utilisée dans la plupart des softs de TICT.
A part ngetchx()/GKeyIn() et _rowread/_keytest(_optimized), il y a une fonction qui offre les mêmes codes de touche que les premières, avec une vitesse plus proche de celle des deuxièmes: OSdequeue(kbd_queue());
Elle est utilisée dans la plupart des softs de TICT.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
-
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)- Posts: 6863
- Joined: 23 Dec 2009, 00:00
- Location: France
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: -
- GitHub: debrouxl
Re: [C] touches qui ralentissent le programme !
(bien vu j'y pense jamais !)
-
Folco
Niveau 8: ER (Espèce Rare: nerd)- Posts: 150
- Joined: 23 Sep 2010, 00:00
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: anapu :p
Re: [C] touches qui ralentissent le programme !
Lionel Debroux wrote:Question idiote: est-ce que le ralentissement lors de l'appui d'une touche se produit sur émulateur, ou sur calculette réelle ?
A part ngetchx()/GKeyIn() et _rowread/_keytest(_optimized), il y a une fonction qui offre les mêmes codes de touche que les premières, avec une vitesse plus proche de celle des deuxièmes: OSdequeue(kbd_queue());
Elle est utilisée dans la plupart des softs de TICT.
Sur émulateur, pour mon jeu. Mais par exemple, en ce qui concerne le jeu en Newprog, c'est aussi le cas sur la calculatrice, je crois.
Mes programmes => ici !
-
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)- Posts: 1985
- Images: 8
- Joined: 02 Aug 2009, 00:00
- Location: 54, près de Metz
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Ingé Logiciel chez Amazon
10 posts
• Page 1 of 1
Who is online
Users browsing this forum: ClaudeBot [spider] and 2 guests