J'ai lu deux autres fils ici sur le mouvement: Mouvement basé sur le temps Vs Mouvement basé sur la fréquence d'images? et quand dois-je utiliser un pas de temps fixe ou variable?
mais je pense que je manque d'une compréhension de base du mouvement indépendant du cadre parce que je ne comprends pas de quoi parle l'un de ces fils.
Je suis avec les tutoriels SDL de lazyfoo et suis tombé sur la leçon indépendante du cadre. http://lazyfoo.net/SDL_tutorials/lesson32/index.php
Je ne suis pas sûr de ce que la partie mouvement du code essaie de dire, mais je pense que c'est cela (veuillez me corriger si je me trompe): Afin d'avoir un mouvement indépendant du cadre, nous devons savoir jusqu'où un objet ( ex. sprite) se déplace dans un certain laps de temps, par exemple 1 seconde. Si le point se déplace à 200 pixels par seconde, je dois calculer combien il se déplace dans cette seconde en multipliant 200 pps par 1/1000 de seconde.
Est-ce correct? La leçon dit:
"vitesse en pixels par seconde * temps depuis la dernière image en secondes. Donc si le programme fonctionne à 200 images par seconde: 200 pps * 1/200 secondes = 1 pixel"
Mais ... je pensais que nous multiplions 200 pps par 1 / 1000ème de seconde. Quelle est cette activité avec des images par seconde?
J'apprécierais que quelqu'un puisse me donner des explications un peu plus détaillées sur le fonctionnement du mouvement indépendant du cadre.
Je vous remercie.
UNE ADDITION:
SDL_Rect posRect;
posRect.x = 0;
posRect.y = 0;
float y, yVel;
y = 0;
yVel = 0;
Uint32 startTicks = SDL_GetTicks();
bool quit = false;
SDL_Event gEvent;
while ( quit == false )
{
while ( SDL_PollEvent( &gEvent ) )
{
if ( gEvent.type == SDL_QUIT )
quit = true;
}
if ( y <= 580 )
{
yVel += DOT_VEL;
y += (yVel * (SDL_GetTicks() - startTicks)/1000.f);
posRect.y = (int)y;
}
startTicks = SDL_GetTicks();
SDL_BlitSurface( bg, NULL, screen, NULL );
SDL_BlitSurface( dot, NULL, screen, &posRect );
SDL_Flip( screen );
}
C'est du code qui déplace un point sur l'écran. Je pense que tout est correct jusqu'à présent. Il descend sur l'écran mais il y a une chose étrange que je ne peux pas expliquer. Le point est censé rester à y = 580 lorsqu'il atteint une valeur supérieure à cette valeur y. Cependant, chaque fois que j'exécute le programme, le point se retrouvera à un endroit différent, ce qui signifie un peu plus de 580, donc le point est à mi-chemin ou à mi-chemin de l'écran (le point fait 20 pixels, écran dimensions 800x600). Si je fais quelque chose comme cliquer et maintenir la barre de titre du programme, puis relâcher, le point disparaît de l'écran. Comment se fait-il que cela soit variable à chaque fois? En ce qui concerne le problème de la barre de titre, je pense que c'est parce que lorsque je m'accroche à la barre de titre, le chronomètre fonctionne toujours et le temps écoulé augmente, résultant en une plus grande distance, le point se déplace dans l'image suivante. Est-ce correct?
yMovement = (yVel * (SDL_GetTicks() - startTicks)/1000.f);
alors faites:if(y + yMovement <= 580){ y += yMovement; } else { y = 580; }