1

Bonjour, ça fait 5h que je planche sur un pb...
comment annimer un sprite???

j'ai essayé comme ceci:

unsigned long int gear1[] = {0x0000,0x0180,0x318c,0x3ffc,
0x1ff8,0x1ff8,0x1E78,0x7c3e,0x7C3E,0x1E78,0x1FF8,0x1FF8,0x3FFC,0x318C,0x0180,0x0000};
unsigned long int gear2[] = {0x0000,0x08C0,0x1CC0,0x1FFC,0x1FFE,0x1FFC,0x7E78,0x7C38
,0x1C3E,0x1E7E,0x3FF8,0x7FF8,0x3FF8,0x0338,0x0310,0x0000};
unsigned long int gear3[] = {0x0000,0x0C60,0x0C60,0x0FF0
,0x1FFE,0x7FFE,0x7E78,0x1C38,0x1C38,0x1E7E,0x7FFE,0x7FF8,0x0FF0,0x0330,0x0330,0x0000};
unsigned long int gear4[] = {0x0000,0x0310,0x0318,0x3FF8,0x7FF8,0x1FF8,0x1E7E,0x7C3E,0x7C38
,0x1E78,0x1FF8,0x1FFE,0x1FFC,0x18C0,0x08C0,0x0000};
unsigned long int nogear[] = {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,};


.....
......
.....


Sprite32(0, ygear, 16, gear1, LCD_MEM, SPRT_XOR);
time();
Sprite32(0, ygear, 16, gear2, LCD_MEM, SPRT_XOR);
time();
Sprite32(0, ygear, 16, gear3, LCD_MEM, SPRT_XOR);
time();
Sprite32(0, ygear, 16, gear4, LCD_MEM, SPRT_XOR);
time();




void time()
void time()
{
for(i=0;i<10000;i++)
{
for(i=0;i<10000;i++)
{
for(i=0;i<10000;i++)
{
for(i=0;i<10000;i++)
{
for(i=0;i<10000;i++)
{
for(i=0;i<10000;i++)
{
for(i=0;i<10000;i++)
{
for(i=0;i<10000;i++)
{
for(i=0;i<10000;i++);
}
}
}
}
}
}
}
}
}





Que je mette des pertes de temps avec des boucles ou pas, le sprite bouge à une vitesse déconcertante..
j'aimerai qu'il bouge à une vitesse 'nomale' lol

merci smile

2

le problème c'est que si ça se trouve tes boucles vides sont optimisées...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

3

remplace tes boucles vide par du code asm tu auras plus de précision connaissant la "vitesse" d'un "nop"

ie un truc genre

mode #$FFFF,d0
\loop: nop
  nop
  nop
  nop
  dbra d0,\loop


(tapé au feeling non testé gnu as non compatible enfin c'est quand meme du 68k ^^)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4

TIGCC supprime les boucles vides (du moins, avec les paramètres d'optimisation que j'utilise) (du moins, il le faisait quand j'avais testé)

une solution, pour qu'il ne supprime pas ces boucles, est de déclarer ta variable de boucle en temps que "volatile"
volatile unsigned long i;
for(i=0 ; i<10000 ; i++);

normalement, cela désactive les optimisations en rapport avec cette variable.

cela dit, comme cela a été dit juste au dessus, des boucles de ce genre ne seront pas extrèmement précises, en terme de durée.
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

5

mais après, si j'utilise i, les sprites sont pas fidèles...on dirait une sorte de XOR sur le sprite même, qui est donc remplacé pas un truc tout moche

6

comment ça, "si j'utilise i" ?
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

7

-

8

Cela dit, la méthode utilisée est vraiment mauvaise...
Dans un jeu ça ne se pass pas comme ça.

En tout cas, si tu n'as besoin d'animer qu'un seul sprite (comme ce que tu as mis dans ton post), je te conseille d'utiliser des timers.
avatar
« 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. »

9

comment je dois fare alors?
mercismile
car je sais vraiment pas comment faire autrement

10

squale92> erf mettre le i volatile c'est ignoble. Tu forces l'écriture en ram de i et sa relecture à chaque itération eek.

Un truc comme ça serait plus efficace je pense non ?
for(i=0 ; i<10000 ; i++) __asm__ __volatile__("");

11

-

12

lol COMMENT?! sans que ça fasse une "bouille de pixels" come dirait Orion lol

13

Orion> nan j'utilise pas vraiment de l'asm, ça sert juste à empècher gcc d'optimiser la boucle. Ca ne génère aucun code mais ça casse l'algorithme d'optimisation qui aurait viré la boucle grin

Après oui évidemment tu peux faire la boucle entièrement en assembleur si tu veux happy

14

N'empèche, optimiser une boucle d'attente, ça c'est un concept que j'aime bien grin

15

...je voudrait pas être lourd mais ça ne me dit tjs pas comment je dois m'yu prendre lol!!
comme ds un jeu? c'est à dire???

16

-

17

et tempo minime?? c'est quel genre de fonction? c'est aussi avec for(i=0;i<x;i++);??

18

squale92> erf mettre le i volatile c'est ignoble. Tu forces l'écriture en ram de i et sa relecture à chaque itération

bah oui, c'est bien violent
mais avec ça, la boucle fera toujours à peu prêt le même temps... (qui ne sera pas le même sur HW1 et HW2, certes, et qui peut dépendre du niveau des piles ; pas super précis, donc)...
alors que sinon, un coup le compilateur mettra ta variable dans un registre et ça ira vite ; un coup ça ira plus doucement...
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

19

-

20

tiens d'ailleur

for(i=0 ; i<10000 ; i++);


devrait etre optimisé en

i=10000;

sinon ça rend le code completement faux
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

21

Godzil> sauf que i est pas utilisé après donc i est supprimé complètement. Mais si i était utilisé après, oui c'est ce qui serait fait.
squale92> oué mais en accédant à la mémoire t'as plus d'aléas qu'avec la variable dans un registre.

22

spectras: bien sur ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

23

neurosupherot> ce qu'on fait, pour temporiser des progs, c'est passer par les interruptions : regarde la doc de SetIntVec (coucou bob cheeky), c'est la seule méthode propre pour être sûr que ton programme s'exécutera à une vitesse donnée... Si tu n'as pas besoin d'une attente très précise, tu peux même utiliser simplement OSRegisterTimer, mais attention, l'attente se fait par pas de 1/20è de seconde, donc ce n'est pas vraiment suffisant pour un jeu "temps réel"...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

24

ce que je veux faire en fait, c'est dans un menu un truc du style

X MENU
A propos
Quitter

où le X est mon sprite animé

et donc, il bouge, tant que je n'ai pas appuyé sur haut ou bas.
le seul pb c ce *** de sprite animé que marche pas lol ça a un rendu de nimportequoi lolsmile

25

regarde OSRegisterTimer, ça devrait pas trop mal marcher...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)