Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: SceneManager  (Lu 2425 fois)

0 Membres et 1 Invité sur ce sujet

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
SceneManager
« le: Novembre 11, 2014, 01:19:57 pm »
Bonjour,

J'ai essayé de m'approprier le ScèneManager proposé sur le github de Laurent. Je voulais essayer de comprendre comment cela marchait. Après quelques tests et après compréhension je m'aperçois que l'application utilise 30 % du processeur d'après le gestionnaire de tâches ce qui me parait énorme quand on voit qu'une application avec un seul screen ne dépasse pas les 1 % ... Donc je comprends que ça utilise plus le processeur mais à ce point je suis étonné tout de même :/

Est ce donc normal ?
Merci d'avance
« Modifié: Novembre 11, 2014, 10:52:10 pm par Develog »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : SceneManager
« Réponse #1 le: Novembre 11, 2014, 02:55:44 pm »
Quel SceneManager ? Ce serait bien de mettre le lien directement, qu'on n'ait pas tous à chercher ;)
Laurent Gomila - SFML developer

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : SceneManager
« Réponse #2 le: Novembre 11, 2014, 03:35:23 pm »
Voici : https://github.com/SFML/SFML/wiki/Tutorial:-Manage-different-Screens
J'ai enlevé tous les sprites etc, j'ai juste gardé que quand nous appuyons sur une touche sans change de screen

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : SceneManager
« Réponse #3 le: Novembre 11, 2014, 04:23:55 pm »
Le code du wiki ne fait aucune pause, il est donc normal qu'il occupe 100% d'un coeur de ton processeur. Il n'en occupera moins que si tu lui dis d'en occuper moins (limite le framerate, ou active la synchro verticale).
Laurent Gomila - SFML developer

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : SceneManager
« Réponse #4 le: Novembre 11, 2014, 07:14:54 pm »
Merci beaucoup, c'est tout de suite mieux quand on limite le framerate ;)
Passage de 30 % d'utilisation à 0,1 % !

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : [Résolu]SceneManager
« Réponse #5 le: Novembre 11, 2014, 10:52:01 pm »
J'ai une autre question, ou plutôt un problème ...

Je souhaiterai clarifier le ScreenManager, donc j'aimerai faire une classe ScreenManager contenant ces fonctions :

#ifndef SCREENMANAGER_H
#define SCREENMANAGER_H

#include <SFML/Graphics.hpp>
#include <iostream>
#include "CScreen.h"
#include "screen_0.h"
#include "screen_1.h"
#include "screen_2.h"

class ScreenManager
{
    public:
        ScreenManager();
        void Init();
        void Update(sf::RenderWindow &App);
    private:
        std::vector<CScreen*> Screens;
        int screen = 0;
};

#endif // SCREENMANAGER_H
 

#include "ScreenManager.h"

ScreenManager::ScreenManager()
{

}

void ScreenManager::Init()
{
    screen_0 s0;
    Screens.push_back(&s0);
    screen_1 s1;
    Screens.push_back(&s1);
    screen_2 s2;
    Screens.push_back(&s2);
}

void ScreenManager::Update(sf::RenderWindow &App)
{
    while (screen >= 0)
    {
        screen = Screens[screen]->Run(App);
    }
}
 

Et puis dans le main faire :

#include <iostream>
#include <SFML/Graphics.hpp>

#include "ScreenManager.h"

int main(int argc, char** argv)
{
    sf::RenderWindow App(sf::VideoMode(640, 480), "SFML Demo 3");
    App.setFramerateLimit(60);

    ScreenManager test;
    test.Init();
    test.Update(App);

    while (App.isOpen())
    {
        sf::Event event;
        while (App.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                return(-1);
        }
        App.clear(sf::Color(0, 0, 0, 0));
        App.display();
    }

    return 0;
}
 

Sauf que voilà mon application plante et d'après le debugguer cela vient de ma fonction Update et donc je pense à un soucis de pointeur, mais là je reconnais que je suis totalement perdu sur l'utilisation des pointeurs à partir de CScreen, je ne sais donc comment régler le problème ...

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : SceneManager
« Réponse #6 le: Novembre 11, 2014, 11:18:50 pm »
Ton tableau de screens est rempli de pointeurs vers des instances qui n'existent plus (elles sont locales à la fonction Init()).
Laurent Gomila - SFML developer