En fait, je voudrais savoir comment on peut mélanger deux boucles, l'une avec des tests de touches, sans qu'elles se ralentissent !
Exemple : un pong de base : la balle bouge à vitesse régulière, mais comment je fais pour que quand j'appuie sur "haut" pour bouger mon curseur, ça gêne pas l'éxécution de la boucle qui contient le mouvement de la balle ?
natto Le 14/11/2004 à 11:53 simple, suffit de deplacer le curseur a chaque iteration, ou pas.

納 豆パワー!
I becamed a natto!!!1!one!
chaque itération ???? dsl je vois pas ce que c
Merci pour l'itération.
Mais pour le bout de script de Nu, je pige pas où je le met justement le bout !
merci bien, je vais esayer ça tout de suite....
if(kbhit()){
k=ngetchx();
}else{
k=0;
}
dans ce code, en fait, tu testes si une touche est pressée, ensuite tu rentres la touche dans k, puis si aucune touche n'est pressée tu donnes la valeur 0 à k.
Moi j'ai donné ça :
void _main(void)
{
static unsigned char sprite[] = {0b01111100,0b11111110,0b11111110,0b11111100,0b01111000,0b00110000,0b00110000,0b00110000};
short a=50, k=40, j=50, echap=0; //a la hauteur de la raquette, k et j les coordonnées de la balle (k abscisse)
clrscr();
Sprite8 (6, 50, 8, sprite, LCD_MEM, SPRT_OR); //affiche une première fois la raquette
ngetchx();
while(k != echap) //tant que la balle est dans l'écran
{
if(kbhit()) //si une touche est pressée
{ k=ngetchx(); } //k est la valeur de la touche
else
{ k=0; } //sinon on retourne 0
switch(k)
{
case 337: // si la touche est "bas"
a += 2;
break;
case 340: // si la touche est "haut"
a -=2;
break;
case 13:
goto Fin; //Si on appuie sur "Enter", ça quitte (histoire de pouvoir quitter)
break;
}
Sprite8 (a, 6, 8, sprite, LCD_MEM, SPRT_OR);
}
Fin :
}
Et ça donne rien. Juste la raquette s'affiche une fois et après la prog s'arrête dès qu'on appuie sur une touche (le ngetchx() ).
Et comment je fais pour effacer un sprite ?
Pasque dans les commandes à la fin du truc du sprite, ya XOR, AND et OR, mais ça fait pas disparaitre
une solution pour effacer un sprite est de le réafficher en XOR au même endroit.
cela dit, à partir du moment où on a un nombre conséquent de sprites à l'écran, il est généralement plus rapide de tout effacer, et de tout redessiner
ouais ok merci. Et au fait, mon code est devenu :
void _main(void)
{
static unsigned char sprite[] = {0b01111100,0b11111110,0b11111110,0b11111100,0b01111000,0b00110000,0b00110000,0b00110000};
short a=50, k=40, j=50, echap=0, l=0 ; //a la hauteur de la raquette, k et j les coordonnées de la balle (k abscisse)
clrscr();
Sprite8 (6, 50, 8, sprite, LCD_MEM, SPRT_OR); //affiche une première fois la raquette
while(k != echap) //tant que la balle est dans l'écran
{
if(kbhit()) //si une touche est pressée
{ l=ngetchx(); } //l est la valeur de la touche
else
{ l=0; } //sinon on retourne 0
switch(l)
{
case 337: // si la touche est "bas"
a -= 2;
break;
case 340: // si la touche est "haut"
a +=2;
break;
case 13:
goto Fin; //Si on appuie sur "Enter", ça quitte (histoire de pouvoir quitter)
break;
}
Sprite8 (6, a, 8, sprite, LCD_MEM, SPRT_OR);
}
Fin :
}
Ya pas moyen de faire aller le dessin de la raquette un peu plus vite ?? ou que il y ait pas besoin d'appuyer 107 ans pour que la rapuette bouge à vitesse constante ?
mais je pige pas comment ça s'utilise _rowread.
Je vais pas faire :
a _rowread (1 row); // et il me trouve une touche ?? après je suppose que quand il a la touche il me la met dans a.
Regarde du côté de _keytest plutôt. L'utilisation directe de _rowread est compliquée et obsolète.
RowRead.key_A est l'équivalent de _keytest(RR_A), pas d'un _rowread.
j'ai pas bien pigé votre truc mais moi j'ai ça :
void _main(void)
{
static unsigned char sprite[] = {0x30,0x38,0x3C,0x3C,0x3C,0x3C,0x38,0x30};
short a=50, k=40, j=50, echap=0, l=0; //a la hauteur de la raquette, k et j les coordonnées de la balle (k abscisse)
clrscr();
Sprite8 (6, 50, 8, sprite, LCD_MEM, SPRT_OR); //affiche une première fois la raquette
while (k != echap)
{
l=keytest();
if (_keytest (0, 2)) //si "bas" est pressée
{ a -= 2; }
if (_keytest (0, 1)) //si "haut" est pressée
{ a += 2; }
if (_keytest (1, 0)) //si "Enter" est pressée
{ goto Fin; }
l=0;
Sprite8 (6, a, 8, sprite, LCD_MEM, SPRT_OR);
}
Fin :
}
et je vois pas pkoi il réagit pas pareil quand je met "haut" et quand je met "bas" !!
D'autant que quand je veux lancer il me dit "unresolved to keytest" mais je vois pas où est le pb, et le coup d'après il lance sans pb le truc.
Lis la doc en entier ! Il est suggéré de détourner certaines interruptions qui scannent le clavier et donc interfèrent avec _rowread (ou _keytest, c'est pareil).

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
en effet elle sert à rien, je l'ai laissée par erreur en changeant mon code.
Et désolé si "j'ai pas lu la doc en entier" mais l'anglais de prog c pas évident au début ! moi j'ai pas lu ça...
Enfin bon je suis pas avancé...pasque Sasume même ta traduction elle me dit pas gd chose : je vois pas en quoi j'ai une interruption qu iinterfère ! Mon interruption qu iscane le clavier c'est _keytest et je vois pas en quoi il interfère ac autre chose !
Désolé Quesoft mais je pige pas du tout ton code....Je vois pas comment tu utilises _RowRead.
ah ok. Et c koi les handlers................................... ?