IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Afficher les FPS dans la fenêtre


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chomeur
    Inscrit en
    Février 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Février 2013
    Messages : 37
    Points : 32
    Points
    32
    Par défaut Afficher les FPS dans la fenêtre
    Bonjour

    Voilà, je compte afficher les FPS dans un message à l'aide de SDL_gfx. Seulement, j'obtiens toujours 0 en FPS. Voici le code du main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    #include <stdlib.h>
    #include <stdio.h>
    #include "SDL/SDL.h"
    #include "SDL/SDL_ttf.h"
    #include "SDL/SDL_mixer.h"
    #include "SDL/SDL_framerate.h"
    #include "image.h"
    #include "init.h"
    #include "close.h"
    #include "timer.h"
     
     
    int main( int argc, char *argv[ ] )
    {
        const int SCREEN_WIDTH = 800; 
        const int SCREEN_HEIGHT = 600; 
        const int SCREEN_BPP = 32; 
     
    	SDL_Surface *screen = NULL; //Surface qui concerne l'écran
        SDL_Surface *background = NULL;//L'arrière plan
    	SDL_Surface *message = NULL;//Un message
    	Mix_Chunk *sound = NULL; //Un son
    	SDL_Event evenement; //Événement
    	TTF_Font *font;
    	SDL_Color textColor = { 0, 0, 0 };
    	int quit = 0;
    	int frame = 0;
    	char fnBackground[12] = "BGS/sky.png";// Chaine pour charger l'image
    	FPSmanager fpsMan;
    	timer update = {0,0,0,0};
     
    	//Initialisation de la SDL
    	screen=initSDL(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP);
    	//Initialisation du FPSManager
        SDL_initFramerate(&fpsMan);
    	//Réglage du FPS à 60
    	SDL_setFramerate(&fpsMan,35);
    	if (screen == NULL)
    	{
    		return EXIT_FAILURE;
    	}
     
    	//Ouverture du Font
        font = TTF_OpenFont( "Arial.ttf", 16 );
     
     
        //S'il y a une erreur dans le chargement du Font
        if( font == NULL ) 
    	{
    		return EXIT_FAILURE;
        }
     
    	sound = Mix_LoadWAV( "SND/Tornado By.wav" );
    	if (sound == NULL)
    	{
    		return EXIT_FAILURE;
    	}
     
    	//Mise en place du texte sur la surface message
     
    	background = load_image(fnBackground);
    	apply_surface( 0, 0, background, screen );
    	startTimer(&update);
     
     
     
        while (quit==0)
    	{
    		while( SDL_PollEvent( &evenement ) ) 
    		{
    			//Si l'utilisateur a cliqué sur le X de la fenêtre
                if( evenement.type == SDL_QUIT ) 
    			{//On quitte le programme
                    quit = 1;
                }
    			if(evenement.type == SDL_KEYDOWN)
    			{
    				if (evenement.key.keysym.sym ==SDLK_ESCAPE)
    				{
    					quit = 1;
    				}
    				if (evenement.key.keysym.sym == SDLK_SPACE)
    				{
    					//On joue l'effet sonore
    					if( Mix_PlayChannel( -1, sound, 0 ) == -1 )
    					{
    						return EXIT_FAILURE;
    					}
    				}
    			}
    		}
    		//Mise à jour de l'écran 
    		if( SDL_Flip( screen ) == -1 ) 
    		{ 
    			return EXIT_FAILURE; 
    		}
    		frame++;
    		//Si une seconde est passee depuis la derniere mise à jour de la barre caption
    		if( getTicks(&update) > 1000 )
    		{
    			//Une chaine de caracteres temporaire
    			char caption[ 64 ];
    			//On calcule le nombre de frames par seconde et on cree la chaine de caracteres
    			sprintf( caption, "FPS : %f",SDL_getFramerate(&fpsMan));
    			//On met à jour le message
    			message = TTF_RenderText_Solid( font, caption, textColor );
    			apply_surface( 10, 10, message, screen );
    			//On relance le timer update
    			startTimer(&update); 		
    			SDL_framerateDelay(&fpsMan);
    		}
    	}
     
        SDL_FreeSurface( background ); 
    	SDL_FreeSurface( message );
        //Fermeture des Fonts qu'on a utilisé
        TTF_CloseFont( font );
        closeSDL();
    	return EXIT_SUCCESS;
    }
    Je mets aussi celui du timer au cas où cela serait utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include <stdlib.h>
    #include <stdio.h>
    #include "SDL/SDL.h"
    #include "timer.h"
     
    void startTimer (timer *timer)
    {
    	//On demarre le timer
    	timer->started = 1;
    	//On enlève la pause du timer
    	timer->paused = 0;
    	//On récupére le temps courant
    	timer->startTicks = SDL_GetTicks();
    }
     
    void stopTimer (timer *timer)
    {
    	//On demarre le timer
    	timer->started = 0;
    	//On enlève la pause du timer
    	timer->paused = 1;
    	//On récupére le temps courant
        timer->startTicks = SDL_GetTicks();
    }
     
    int getTicks(timer *timer)
    {
    	//Si le timer est en marche
    	if( timer->started == 1 )
    	{
    		//Si le timer est en pause
    		if( timer->paused == 1 )
    		{
    			//On retourne le nombre de ticks quand le timer a été mis en pause
    			return timer->pausedTicks;
    		}
    		else
    		{
    			//On retourne le temps courant moins le temps quand il a démarré
    			return SDL_GetTicks() - timer->startTicks;
    		}
    	}
    	//Si le timer n'est pas en marche
    	return 0;
    }
     
    void pause(timer *timer)
    {
    	//Si le timer est en marche et pas encore en pause
    	if( ( timer->started == 1 ) && ( timer->paused == 0 ) )
    	{
    		//On met en pause le timer
    		timer->paused = 1;
    		//On calcul le pausedTicks
    		timer->pausedTicks = SDL_GetTicks() - timer->startTicks;
    	}
    }
     
    void unpause(timer *timer)
    {
    	//Si le timer est en pause
    	if( timer->paused == 1 )
    	{
    		//on enlève la pause du timer
    		timer->paused = 0;
    		//On remet à zero le startTicks
    		timer->startTicks = SDL_GetTicks() - timer->pausedTicks;
    		//Remise à zero du pausedTicks
    		timer->pausedTicks = 0;
    	}
    }
     
    int is_started(timer *timer)
    {
    	return timer->started;
    }
     
    int is_paused(timer *timer)
    {
    	return timer->paused;
    }
    Merci de m'aider.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Points : 321
    Points
    321
    Par défaut
    Bonjour,

    C'est peut être à cause du paramètre de sprintf ?
    (SDL_getFramerate est un int).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chomeur
    Inscrit en
    Février 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Février 2013
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Ah oui, je n'ai même pas fait attention. Il est des trucs que l'on ne voit pas tout seul. Ça fonctionne maintenant, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affiche les résultat dans une autre fenêtre
    Par bestmoroco dans le forum WinDev
    Réponses: 3
    Dernier message: 26/03/2012, 15h16
  2. [Dev-Pascal] Afficher toutes les lignes dans la fenêtre d'exécution
    Par ryuphenix dans le forum Autres IDE
    Réponses: 3
    Dernier message: 14/08/2010, 13h13
  3. afficher une image dans une fenêtre windows
    Par yashiro dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 02/05/2006, 16h30
  4. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32
  5. Afficher les FPS
    Par p@rasiT dans le forum OpenGL
    Réponses: 5
    Dernier message: 04/10/2004, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo