Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - titouan

Pages: [1] 2 Suivante »
1
Graphique / Re : scrolling d'un background à l'infini
« le: Novembre 30, 2013, 05:31:17 pm »
Merci merci Pour vos réponses. J'ai donc fait ce système :

Deux sprites contenant le background ( l'un au dessus de l'autre ) la vie est fixé en bas du second, et je move les deux sprites vers le bas, dès que je sors du premier je le redessine au dessus du suivant, tout ca avec un petit vector<sf::Sprite> Voili voilou ! trop bien cette sfml <3

2
Graphique / [Résolu] scrolling d'un background à l'infini
« le: Novembre 29, 2013, 02:49:38 pm »
Bonjour à tous !

Une petite question d'ordre graphique :

Je souhaite avoir un background qui défile à l'infini et sans coupure ( ce dernier est texturé ). Comme solution je ne vois que celle d'avoir deux sprite chargés l'un au dessous de l'autre, placer une view au début du premier et la faire monter, quand la view sort du premier sprite, alors on le redessine au dessus du suivant, ainsi il sera déja chargé quand la view arrivera dessus ? Ou en passant par un tableau de vertex ? D'autres idées ? merci !!

3
Graphique / Re : sf::renderWindow en paramètre à sf::Thread
« le: Novembre 29, 2013, 02:46:40 pm »
C'est un thread qui est sensé bloqué la fenêtre pendant son exécution ?

4
Graphique / Re : Problème de ralentissement petit shm'up
« le: Novembre 28, 2013, 04:08:21 pm »
J'ai trouvé la solution ... C'est juste que j'oubliais de passer textureManager par référence du coup j'en recrée un à chaque itération ... Je reste à l'écoute de vos amélioration de code ! Merci !

5
Graphique / [Résolu] Problème de ralentissement petit shm'up
« le: Novembre 28, 2013, 11:30:20 am »
Bonjour à tous et merci par avance de vos potentiels réponses.

Je suis en train de créer un petit shm'up à la space invader ("scrolling infini qui deviens de plus en plus dur")
Cependant, j'ai un problème ... En gros, je génère des ennemis, et à chaque fois que un d'entre eux sort de la View je le supprime de la liste des ennemis existants, quand le nombre d'ennemis est égal à 0 j'en génère d'autres en augmentant le nombre... Le problème est qu'à partir de la troisième génération ( voir deuxième ) avec à peine 25 ennemis ca lag ... Les fps tombent en dessous de 30 et encore bien en dessous par la suite 10 puis 5 .

J'ai donc crée un textureManager qui se charge dès le début de la partie de manière à ne pas charger les textures à chaque affichage, le principe d'affichage est le suivant :

//Boucle qui vérifie si un ennemi sort de la view
//Boucle qui move chaque ennemis de la liste puis les affiche

La boucle principale :
App::App()
{
        window.create(sf::VideoMode(600, 600), "Space", sf::Style::Close );
    window.setVerticalSyncEnabled(1);
}

void App::start()
{
        window.clear(sf::Color::White);
}

void App::runGame()
{
    GraphicsManager graphicsManager(window);
       
    sf::Clock clock;
    float lastTime = 0;
        while(window.isOpen())
        {
        sf::Event event;
                while (window.pollEvent(event))
                {
                        if (event.type == sf::Event::Closed)
                        {
                                window.close();
                                exit(1);
                        }
                }


    graphicsManager.slideAll(window);
    window.display();
    sf::Time elapsed1 = clock.getElapsedTime();
    float fps= 1/ elapsed1.asSeconds();
    cout <<"Fps : "<<fps << std::endl;
    clock.restart();

        }      
}

Le gameManager ( qui servira à gérer les différents coefs et scores) et qui sert actuellement à gérer les listes d'ennemis
GameManager::GameManager()
{
    m_score=0;
    m_ennemiesNumber= 3;
        m_ennemiesNumberCoef= 1;
       
        string dir ="dat/ennemies/";
        DIR *folder=opendir(dir.c_str());
        dirent *currentFiles=NULL;
       
        // INITIALISING THE ENNEMIESLIST
       
    while((currentFiles = readdir(folder))!=NULL)
        {
                string tmp(currentFiles->d_name);
                if(tmp.find(".txt") != string::npos)
                {
            SpaceShips create(dir+tmp);
                        ennemiesList.push_back(create);
                }
        }
}

void GameManager::ennemiesGeneration(int leftX, int leftY)
{
    random_device rd;
    mt19937 gen(rd());
    uniform_int_distribution<int> Xposition(leftX, leftX+500);

    existentEnnemiesList.resize(m_ennemiesNumber*m_ennemiesNumberCoef);
    for(int i=0; i<existentEnnemiesList.size(); ++i)
    {
        shuffle(ennemiesList.begin(), ennemiesList.end(), random_device());
        existentEnnemiesList[i] = ennemiesList[0];
        existentEnnemiesList[i].setPosition(Xposition(gen), leftY-100);
    }
    m_ennemiesNumberCoef+=3;
}

Le GraphicsManager qui gère les mouvements et sorti de liste et l'affichage
#include "GraphicsManager.hpp"

using namespace std;

GraphicsManager::GraphicsManager(sf::RenderWindow &window)
{
    m_slideCoef=1;
    standard = window.getView();
    standard.setCenter(300, 9000);
    texture.loadFromFile("dat/back.png");
    back.setTexture(texture);
    window.draw(back);
    TextureManager textureManager();
}

void GraphicsManager::slideAll(sf::RenderWindow & window)
{
    // Background Slide
    standard.move(0.f, -2.f);

    // COORD

    sf::Vector2f coor=standard.getCenter();
    int leftCornerX=coor.x-(standard.getSize().x/2);
    int leftCornerY=coor.y+(standard.getSize().y/2);
    int leftCornerYTop=coor.y-(standard.getSize().y/2);
    int maxX=leftCornerX+standard.getSize().x;

    // RETURN 0 FOR SLIDING

    sf::Vector2f lim(0, 300);
    if(coor.y==lim.y)
    {
        standard.setCenter(300, 9000);
    }

    if(existentEnnemiesList.size()==0)
        ennemiesGeneration(leftCornerX, leftCornerYTop);

    // Move & ennemies & delete if out of view
    int maxBox;
    int cpt=0;
    vector<SpaceShips>::iterator it;
    for(it=existentEnnemiesList.begin(); it!=existentEnnemiesList.end(); ++it)
    {
        sf::FloatRect border=(*it).getBox();
        maxBox=border.left + border.width;
        if(border.left<=leftCornerX || maxBox>=maxX)
        {
            (*it).reverse();
        }
        if(border.top>=leftCornerY)
        {
            existentEnnemiesList.erase(existentEnnemiesList.begin()+cpt);
            it=existentEnnemiesList.begin()+cpt;
            cpt--;
            break;
        }
        cpt++;
    }
    window.setView(standard);
    window.draw(back);
    for( auto &T:existentEnnemiesList)
    {
        T.moveX();
        T.moveY();
        T.display(window, textureManager);
    }

}

 le textureManager
#include "TextureManager.hpp"

using namespace std;

TextureManager::TextureManager()
{
        string dir ="dat/ennemiesTextures/";
        DIR *folder=opendir(dir.c_str());
        dirent *currentFiles=NULL;
       
        sf::Texture toMap;

        // INITIALISING THE ENNEMIESLIST
       
        while((currentFiles = readdir(folder))!=NULL)
        {
                string tmp(currentFiles->d_name);
                if(tmp.find(".png") != string::npos)
                {
            if(toMap.loadFromFile(dir+tmp))
                        {
                textureList[tmp]= toMap;
            }
                }
        }
}

sf::Sprite TextureManager::getTexturedSprite(string textureName)
{
    sf::Sprite sprite;
    std::map<string,sf::Texture>::iterator it;
    it=textureList.find(textureName);
    sprite.setTexture((*it).second);
    return sprite;

}

Et l'objet SpaceShips
#include "SpaceShips.hpp"

using namespace std;

SpaceShips::SpaceShips()
{
}

SpaceShips::SpaceShips(string path)
{
    ifstream load(path, ios::in);
    string buff;
        if(load)
        {
                load >> buff >> buff >> name;
                load >> buff >> buff >> buff;
                maxLifePoint=atoi(buff.c_str());
                load >> buff >> buff >> buff;
                dirX=atoi(buff.c_str());
                load >> buff >> buff >> buff;
                dirY=atoi(buff.c_str());
                load >> buff >> buff >> buff;
                velocity=atoi(buff.c_str());
                load >> buff >> buff >> buff;
                size=atoi(buff.c_str());
                load >> buff >> buff >> buff;
                killPoint=atoi(buff.c_str());
        load >> buff >> buff >> textureName;
    }
               
}


void SpaceShips::moveX()
{
        spaceShipSprite.move(dirX*velocity, 0);
}

void SpaceShips::moveY()
{
        spaceShipSprite.move(0, dirY*velocity);
}

void SpaceShips::reverse()
{
        dirX*=-1;
}

void SpaceShips::display(sf::RenderWindow &window, TextureManager textureManager)
{
    sf::Sprite tmp=textureManager.getTexturedSprite(textureName);
    tmp.setPosition(spaceShipSprite.getPosition());
    tmp.setScale(0.6,0.6);
    window.draw(tmp);
}

sf::FloatRect SpaceShips::getBox()
{
    return spaceShipSprite.getGlobalBounds();
}

void SpaceShips::setPosition(int leftX, int leftY)
{
        spaceShipSprite.setPosition(leftX, leftY);
}

J'écouterais attentivement toutes vos remarques, et même si je sais que mon code est très très loin d'être parfait je me prêterai à toutes les modifications que vous jugerez nécessaires !

Cordialement,

Moi ( :o )

6
Système / Ralentir l'utilisation du CPU
« le: Octobre 19, 2013, 06:15:05 pm »
Bonjour à tous,

Voilà, quand je lance mon programme j'ai le CPU qui passé à 90%-100% ( comme beaucoup de gens ) et j'aimerais ralentir de manière efficace l'utilisation de ce dernier ( La V-SYNC est activé ca n'a pas d'effet, idem pour le setFramerate) Voici mon code si quelqu'un a une idée. ( j'aimerais éviter les sleep qui ralentissent le programme pour rien, en notant qu'un faible sleep n'a pas beaucoup d'effet, ca passe à 60%).
        bool graphDraw=false;
        while(window.isOpen())
        {
                sf::Event event;
                while (window.pollEvent(event))
                {
                        if (event.type == sf::Event::Closed)
                        {
                                window.close();
                                exit(1);
                        }
                        if (event.type == sf::Event::Resized)
                        {
                                animation.affichageBase(window);
                        }
                        window.handleEvent(event);
                }
                tgui::Callback callback;
                while (window.getCallback(callback))
                {
                    if (callback.callbackID == 1)
                    {
                        if (callback.trigger == tgui::Callback::mouseClick)
                        {
                            animation.affichageBase(window);
                            graph.display(pop,window);
                            window.display();
                            graphDraw=true;
                        }
                    }
                    else if (callback.callbackID == 2)
                                    {
                                        if (callback.trigger == tgui::Callback::mouseClick)
                                        {

                                            animation.affichageBase(window);
                                            graph.display(pop, window);
                                            window.display();
                                            graphDraw=true;
                                        }
                                    }
                }
        animation.affichageBase(window);
       if(!graphDraw)
                  window.drawGUI();
       else if(graphDraw)
           graph.display(pop, window);
                window.display();
        }

En vous remerciant !

7
Général / Re : Proposition d'arborescence de projet SFML
« le: Octobre 10, 2013, 12:16:49 pm »
Je m'explique plus clairement . J'ai un algorithme qui vas retourner un objet de type population ( crée par mes soins ). Mon but est que la fenêtre affiche un graph en fonction de cette population a chaque fois que l'algorithme retourne quelque chose ( la population diminue de taille au fur et à mesure des itérations ).

 En fait je ne sais pas comment gérer la fenêtre en même temps que cet algo . Je n'aime pas trop l'idée de faire un thread, je préférerais tout fait dans le principal.. Mais j'ai en fait du mal à comprendre comment ca fonctionne dans ce cas, car je trouve ca très contraignant ? Si ma fenêtre est déclaré dans le main, je devrais créer une fenêtre, la faire passer à ma fonction Start(), dans cette fonction avoir une While(is.open()) qui appel l'algo, et pour gérer quand même les événements pendant l'algo je devrais aussi lui faire passer la fenêtre et placer un while(is.open()) ...

Je suis dans le flou c'est bizare en fait ^

Merci !

8
Fenêtrage / Re : Petite question stupide sur la gestion de fenêtre
« le: Octobre 10, 2013, 10:52:06 am »
Ahah je confirme c'est logique

9
Général / Re : Proposition d'arborescence de projet SFML
« le: Octobre 10, 2013, 10:51:14 am »
C'est bien se que je me disais . Ou alors il faudrait que l'algorithme soit suffisamment rapide pour qu'on ne ressente aucune gène .

Merci

10
Je prie pour qu'il n'y ai pas de manque :/

Merci pour tes réponses en tous les cas !

11
Général / Proposition d'arborescence de projet SFML
« le: Octobre 09, 2013, 08:00:19 pm »
Bonsoir ! je squatte un peu le forum en ce moment et je m'en excuse .

J'ai un projet à réaliser et je me pose donc la question de comment vais-je modéliser tout ca . En gros mon projet est tout simplement de résoudre le problème du voyageur de commerce avec l'algorithme génétique et je dois donc créer une interface graphique pour suivre l'évolution de l'algorithme . Je me disait donc que créer une windows dans le main et gérer les window.clear(), draw et autre dans les fonctions de l'algorithme ca ne me semble pas évident.

Je me suis donc proposé à moi même la solution suivante : 2 threads

Principal ( main ) : Gestion de la fenêtre

Secondaire ( l'algorithme et la résolution du problème)

De cette façon, il est simple de gérer la fenêtre, et d'attendre par exemple l'exécution du thread d'algo pour afficher les résultats . Je me trompe peut être totalement ! mais j'ai du mal à comprendre comment implémenter la SFML dans un tel petit projet ...

Cordialement !

12
Fenêtrage / Petite question stupide sur la gestion de fenêtre
« le: Octobre 09, 2013, 06:47:12 pm »
Bonsoir, j'ai une question concernant la gestion de la fenêtre sfml. J'ai essayé d'intégrer cette dernière à un jeu de puissance 4 modifié que j'ai eut a créer, celà avec succès, mais certainement très salement.

J'ai en effet dû déclarer ma window en global pour pouvoir y accèder dans toutes mes fonctions. Ma question est donc la suivant, doit on obligatoire passer la fenêtre en paramètre aux fonctions dans lesquelles nous voulons modifier un élément de la fenêtre ? Ou y'a t il moyen qu'elle soit accessible autrement ?

Merci,

Cordialement

13
Ahah, je vais laisser tomber l'idée d'intégrer SFML à un projet sans l'avoir installer sur les machines avant. J'ai Cmake, pour la compiler et au moment de sudo make install je vois qu'elle copie pas mal de chose dans les /usr/local. Ca doit être ca qu'il manque sur mes machines, mais comment les installer sans sudo ..

 J'ai du mal à comprendre comment installer sans sudo à vrai dire ... J'ai téléchargé les SDK qui ne contiennent que ( include,  lib et share ) mais que faisons nous avec ca ? Je ne peu utiliser le cMake sur les machines car celui-ci n'est pas installé et je ne peu l'installé. J'aurai aimé pouvoir mettre un dossier SFML dans mon projet git et quand quelqu'un récupère il a juste a make et tout est déja présent, je ne sais pas si c'est possible mais si ca l'est la procédure m'échappe .

Cordialement

14
j'ai un dossier pkconfig et 5 libsfml.so avec le nom de chaque module dedans Graphis etc

15
autant pour moi ^^ c'est bien le dossier compilé que j'ai mit la

Pages: [1] 2 Suivante »