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 - Lolilolight

Pages: « Précédente 1 ... 3 4 [5] 6 7 ... 53 Suivante »
61
Rajout d'une classe "ActionMap" qui permet de gérer les combinaisons d’événements plus facilement.

Ce qui devrait clôturer normalement la version I du framework, la suite portera majoritairement sur des corrections de bug/optimisations, le rajout d'une classe pour gérer une action avec 2 signaux  (un pour faire et un autre pour défaire une action), car j'en ai besoin pour mon éditeur de map, et du nettoyage de code source/génératon de documentation et exemples.

62
Re, une bonne nouvelle, j'ai réussi à simplifier l'écriture au niveau des template lors de la création d'actions et lors la connection de signaux.

J'ai remis à jour les tutoriels et le code source.  :)

Une classe du genre "action map" ne devrait pas tarder à arriver pour simplifier la liaison de plusieurs sf::Event à un seul signal.

PS : mais je dois encore trouver une solution pour le passage de références.
PS 2 : un système de placeholder sera implémenté surement aussi plus tard, dès que j'aurai trouvé comment faire ceci : http://accu.org/index.php/journals/1397 avec des std::tuple à argument variable plutôt que des std::list.

63
Un nouveau chapitre viens juste d'être rédigé (voir le 1er post de ce topic pour les mises à jours), ce chaptire porte sur les lumières, les ombres et les animations.

Bref encore un chapitre à rédiger, un peu d'ordre dans le code source et la version I sortira enfin!

Pour la version II, je prévois d'implémenter un système de particule ainsi que d'améliorer tout ce qui est plus relatif à la physique. (collisions plus précises avec des hiérarchies de volumes englobants, etc...) ainsi que le réseau et la prédiction de mouvement.

J'ai déjà le code source sous la main pour le réseau mais pas encore pour les hiérarchies de volumes englobants qui seront surtout une préparation pour la version III du framework qui incluera la 3D!

Bref je vais faire un update du 1er post qui parlera des versions future.

64
Général / Re : Problème avec les templates...
« le: Janvier 08, 2014, 10:31:54 am »
Les classes et fonctions templates devraient toujours être définies dans un .h, moi aussi j'ai eu des problèmes d'undefined référence à la compilation avec des templates définis dans un fichier à part.

Surtout que je devais inclure le .cpp et pas le .h dans le main, mais, même en faisant ça, ça ne marchait pas si une autre classe utilisait ma classe template.

(C'est le cas de ma classe Fabrique de mon projet SFGL.)

65
Présentation du projet

ODFAE est un framework pour SFML que je développe depuis plusieurs années déjà dans le but de créer un jeux vidéos complet. (De n'importe quel type)

Le but est de fournir un framework le plus complet possible afin de créer n'importe quel type de jeux.  (Et devenir ainsi le framework de création de jeux par excellence.)

Le code source du framework est régulièrement remis à jour et implémente déjà des nouvelles fonctionnalités du standart c++11 (les threads et primitives de synchronisation, les tuples, les lvalue, les std::functions, etc...) ainsi que certains design pattern. (le pattern facory, type erasure, entity system, singleton, etc...)

SFGL est un projet opensource vous pouvez donc faire part de vos idées afin d'améliorer la structure du code source.

La version 1 devrait sortir vers le mois de févrirer-mars mais en attendant vous pouvez toujours aller rechercher les sources sur github : https://github.com/Lolilolight/ODFAEG/tree/master/src/odfaeg

Vous pouvez aussi si vous le souhaiter consulter mon devblog :
http://lolilolightdevblog.wordpress.com/



Les fonctionnalités.

Voici une liste des fonctionnalités implémentées (ou en cours d'amélioration) :

-Un entity system.
-Un système de signal et de slots.
-Un système d'actions.
-Un système de gestion de ressources.
-Un système de states.

Les fonctionnalités à venir dans les versions futures.

-Un système de réseau avec cryptage SSL et prédiction de mouvement.
-Un moteur de particule.
-Gestion de la 3D. (Chargement de fichier.obj, génération de terrain, éclairage, physique, etc...)

Certains tutoriels sont déjà en cours de rédaction sur ce site :

Chapitre I :

http://www.jeux-libres.com/tutoriaux/tuto-679-chapitre-introduction-et-installation-de-sfgl.php

Chapitre II :

http://www.jeux-libres.com/tutoriaux/tuto-680-chapitre-entity-systeme-de-sfgl.php

Chapitre III :

http://www.jeux-libres.com/tutoriaux/tuto-684-odfaeg-ombre-lumieres-et-animation.php

Versions futures

Version II

Ajout de la partie réseau du framework, et ajout de la physique afin de préparer la version III.

Version III

Ajout de la 3D.

66
Général / Re : Juste une petite question sur le c++ d'ordre général.
« le: Janvier 06, 2014, 01:28:05 pm »
Bon bah je crois que j'ai trouvé une solution alternative au problème :

Je créer une fonction non membre callback qui appelle n'importe quel type de pointeur de fonction :

template <typename R> class Functor {
};
template<typename R, typename F> class Functor<R(F)> {
    public :

    template <typename... A>  Functor(R(*f)(F, A...), F funct, A... args) : funct(funct), function(&f) {

    }

    template <typename... A> R operator()(A... args) {
        R(*func)(F, A...) = *reinterpret_cast<R**>(function);
        return  func(funct, args...);
    }

    private :
    F funct;
    R** function;

};
 

Et ensuite une classe "Factory" qui sert à créer un pointeur de fonction sur ma fonction de callback :

#ifndef PLACE_HOLDERS_H
#define PLACE_HOLDERS_H
#include "bind.h"
namespace sfgl {
template <typename F, typename ...A> void callback (F func, A... args) {
    std::cout<<"call back"<<std::endl;
    func(args...);
}

template <typename R, typename F> class Slot {
    public :
        Slot (F f) : function(f) {}
        template <typename ...A> R operator()(A... args) {
            return function(args...);
        }

        template <typename ...A> Functor<void(F)> make_callback (A... args) {
            typedef void(*CB)(F, A...);
            CB cb = &callback;
            Functor<void(F)> funct (cb, function, args...);
            return funct;
        }
    private :
    F function;
};
}
#endif // PLACE_HOLDERS_H
 

Ce code source est puissant car il accepte n'importe quel type d'objet appelant une fonction membre ou non membre (std::function, sfgl::bind, etc...), mais il reste un problème, comment stocké mes foncteurs dans une std::map à l'aide d'une clé.

J'ai trouvé un design pattern intéressant qui pourrait peut être m'aider :

http://come-david.developpez.com/tutoriels/dps/?page=Fabrique

67
Général / Re : Juste une petite question sur le c++ d'ordre général.
« le: Janvier 05, 2014, 06:05:53 pm »
Sinon, je voudrais stocker un pointeur sur une lambda expression, mais il me semble qu'en c++ ce n'est pas possible, je voudrais en fait faire quelque chose comme ceci :


namespace sfgl {
class  System {
    public :
        template <typename R, typename F, typename ...A> static void connect (std::string id, Slot<R, F> slot, A... args) {
            idsToFunctions.insert(std::pair<std::string, std::function<void()>>(id,slot.make_callback(args...)));
        }

        template <typename ...A> static void emit (std::string id, A... args) {
            itToF = idsToFunctions.find(id);
            if (itToF != idsToFunctions.end()) {
                itToF->second(args...);
            } else
                throw Erreur (20, "Slot not found!", 0);
        }
    private :
        static std::map<std::string, std::function<void()>> idsToFunctions;
        static std::map<std::string, std::function<void()>>::iterator itToF;
};
std::map<std::string, std::function<void()>> System::idsToFunctions = std::map<std::string, std::function<void()>> ();
std::map<std::string, std::function<void()>>::iterator System::itToF = idsToFunctions.begin();
}
#endif // OBJECT
 
#ifndef PLACE_HOLDERS_H
#define PLACE_HOLDERS_H
#include "bind.h"
namespace sfgl {
template <typename R, typename F> class Slot {
    public :
        Slot (F f) : function(f) {}

        template <typename ...A> R operator()(A... args) {
            return function(args...);
        }
        template <typename ...A> std::function<void()> make_callback (A... args) {
            std::function<void(A...)> *f = new std::function<void(A...)> (
                [
                    this
                ] (A... args) {

                    (*this)(args...);
                }
            );
            return std::function<void()> (f);
        }
    private :
    F function;
};
}
#endif // PLACE_HOLDERS_H
 

Mais j'aimerais pouvoir stocker dans ma map, n'importe quel type de lambda expression. (Avec un nombre variable d'arguments surtout!)

Quelqu'un sait t'il pour quand c'est prévu les pointeurs sur des lambdas expressions ?

68
Général / Juste une petite question sur le c++ d'ordre général.
« le: Janvier 05, 2014, 10:49:26 am »
Salut, j'aimerais savoir si il y a moyen de passer des références à un tuple et de les extraires : (Car ce code-ci marche bien mais, lorsque je veux utiliser des références le type de l'objet renvoyé par bind change, ce n'est plus un std::function mais un std::_BindHelper marchin quelque chose :

std::function<void(Ex&, std::string)> f1 = std::bind(&Ex::of, obj, "1");
    Slot<void, std::function<void(Ex&, std::string)>> s1(f1);
    s1(obj, "1");
//Ne marche pas!
std::function<void(Ex&, std::string&)> f2 = std::bind(&Ex::of, obj, "1");
    Slot<void, std::function<void(Ex&, std::string&)>> s2(f2);
    s2(obj, "1");
 

Alors j'ai essayer de créer mon propre binder et de faire ça :

#ifndef BIND_H
#define BIND_H

#include "function.h"

#include <tuple>
namespace sfgl {
    namespace helper {
        template<int ...> struct seq {};

        template<int N, int ...S> struct gens : gens<N-1, N-1, S...> {};

        template<int ...S> struct gens<0, S...>{ typedef seq<S...> type; };
    }
    template <typename R> class Bind {
    };
    template <typename R, typename... A> class Bind <R(A...)> {
        public :
        Bind (R(*f)(A...) , A... args) : function(f)  {
            params = std::make_tuple(args...);
        }

        template<int ...S>
        R operator ()(A... args) {
            params = std::make_tuple(args...);
            return callFunc(typename helper::gens<sizeof...(A)>::type());
        }
        template<int ...S>
        R operator ()() {
            //R(*func)(A...) = *reinterpret_cast<R**>(function);
            return callFunc(typename helper::gens<sizeof...(A)>::type());
        }
        template<int ...S>
        R callFunc(helper::seq<S...>)
        {
            return function(std::get<S>(params)...);
        }
        //private :
        std::tuple <A...> params;
        R(*function)(A...);
    };
    template <typename R, typename O, typename... A> class Bind <R(O&, A...)> {
        public:
        Bind (R(O::*f)(A...), O object, A... args) : object(object), function(f) {
            params = std::make_tuple(args...);
        }
        void changeParams (A... args) {
            params = std::make_tuple(args...);
        }
        R operator ()(A... args) {
            params = std::make_tuple(args...);
            return callFunc(typename helper::gens<sizeof...(A)>::type());
        }
        template<int ...S>
        R operator ()() {
            return callFunc(typename helper::gens<sizeof...(A)>::type());
        }
        template<int ...S>
        R callFunc(helper::seq<S...>)
        {
            return (object.*function)(std::get<S>(params)...);
        }
        //private :
        O object;
        std::tuple <A...> params;
        R(O::*function)(A...);
    };
}
#endif // BIND
 

Malheureusement, ça ne fonctionne pas lorsque je veux passer des références à mon slot.

Je sais que il faut utiliser un std::reference_wrapper mais je ne vois pas comment l'utiliser avec les templates variadique..., afin de faire un tuple qui puisse stocker aussi bien des références que des pointeurs.

Bref le but final est d'essayer de faire un binder dont le type ne change pas (que ce soit lorsque j'utilise des références, ou bien des placeholders...)

Bind<void(Ex&, std::string)> b1 (&Ex::of,obj, _1);
    Slot<void, Bind<void(Ex&, std::string)>> s1 (b1);
    s1("1");
Bind<void(Ex&, std::string&)> b2 (&Ex::of,obj, _1);
    Slot<void, Bind<void(Ex&, std::string)>> s2 (b2);
    s2(std::ref("1"));
 

Mais je ne sais pas si c'est possible de faire quelque chose comme ça.

Au pire je mettrai des arguments bidons lors de la création de mon binder si j'en ai pas besoin lors de l'appel du slot que je remplacerai à l'appel du slot, et je n'auriserai pas le passage par référence qui me pose problème mais que par pointeur.

69
Système / Re : Crash avec sf::Clock dans une std::map.
« le: Janvier 04, 2014, 08:31:22 am »
Ok.

70
Système / Crash avec sf::Clock dans une std::map.
« le: Janvier 03, 2014, 12:02:56 pm »
Salut, ce code-ci sur windows 7 crash chez moi (celui mis entre commentaire) :

void addClock(sf::Clock clock, std::string name)  {
        //std::map<std::string, sf::Clock>::iterator it = clocks.find(name);
        /*if (it != clocks.end())
            throw Erreur (13, "This clock already exist!", 0);*/

        clocks.insert(std::pair<std::string, sf::Clock>(name, clock));
        //clocks.insert(std::make_pair(name, clock));
    }
 

J'ai le même problème avec les sf::Event.

Je n'ai pas testé sur linux mais, si ça fonctionne sous linux je pense que je vais passer sous linux.

71
En effet le problème est résolu donc on peut fermé ce post. (Moi même je ne peux pas le faire mais je suppose que quelqu'un s'en chargera de toute façon)

72
Citer
Ton problème est que tu ne veux pas comprendre les choses existantes, tu préfères de les refaire, malgré que cela durera beaucoup plus longtemps et le resultat sera pire. std::function est un bon exemple, elle offre tout ce qu'il faut, mais apparemment tu n'as toujours pas compris ce concepte. Nous avons essayé de te dire cela plusieures foix, c'est dommage que tu préfères de ne pas nous écouter.

Ce n'est pas une question que je ne veux pas écouter les conseils des autres et j'ai très bien compris le concept de std::function et de std::bind, mais le gros défaut de ces 2 objects, c'est qu'ils ne permettent pas de faire des tableaux sur des pointeurs de fonction quelconque.

Bref je te défie de faire un wrapper sur un std::function ou bien sur un std::bind. (avec un nombre variable d'arguments)

Avec ton tutoriel si j'ai bien lu on est obligé de faire soit un foncteur (SpriteMover dans ton cas) qui appelle la fonction ou bien de passer un std::bind (ou un std::function) à ta méthode connect pour l'appelé directement.

Ici, pas besoin, une fonction membre statique suffit :
#ifndef MY_APPLI
#define MY_APPLI
#include "SFGL/Core/application.h"
#include "SFGL/Graphics/2D/tile.h"
#include "SFGL/Graphics/2D/map.h"
#include "SFGL/Graphics/2D/ambientLight.h"
#include "SFGL/Core/action.h"
#include "SFGL/Core/object.h"
#define SPEED 0.1
using namespace sfgl;
using namespace sf;

class MyAppli : public Application {
    public :
    Map* theMap;

    MyAppli(sf::RenderWindow &window) : Application (window) {
        running = false;

    }
    static void close (sf::RenderWindow *window) {
        window->close();

    }
    static void keyHeldDown (sf::View *view, sf::Keyboard::Key key) {
        if (key == sf::Keyboard::Key::Z) {
            view->move (0, -10);
        } else if (key == sf::Keyboard::Key::Q) {
            view->move (-10, 0);
        } else if (key == sf::Keyboard::Key::S) {
            view->move (0, 10);
        } else if (key == sf::Keyboard::Key::D) {
            view->move (10, 0);
        }
    }
    static void mouseInside (Vector2f mousePos) {
        BoundingRectangle br (0, 0, 100, 100);
        if (br.isPointInside(Vec2f(mousePos.x, mousePos.y))) {
            std::cout<<"Mouse inside!"<<std::endl;
        }
    }
    void load() {
        TextureManager &tm =  getCache().resourceManager<Texture>("TextureManager");
        tm.load("tilesets/herbe.png", "GRASS");
        tm.load("tilesets/murs.png", "WALLS");
        View view = getWindow().getDefaultView();
        Vec2f pos (view.getCenter().x - view.getSize().x * 0.5f, view.getCenter().y - view.getSize().y * 0.5f);
        BoundingRectangle br (pos.x, pos.y, view.getSize().x, view.getSize().y);
        theMap = new Map (100, 50, 30, "Map test");
        std::vector<Tile*> tiles;
        std::vector<Tile*> walls;
        tiles.push_back(new Tile(tm.getResourceByAlias("GRASS"), Vec2f(0, 0), Vec2f(120, 60),IntRect(0, 0, 100, 50), 0));
        walls.push_back(new Tile(tm.getResourceByAlias("WALLS"), Vec2f(0, 0), Vec2f(100, 100), IntRect(100, 0, 100, 100), 0));
        walls.push_back(new Tile(tm.getResourceByAlias("WALLS"), Vec2f(0, 0), Vec2f(100, 100), IntRect(100, 100, 100, 100), 1));
        walls.push_back(new Tile(tm.getResourceByAlias("WALLS"), Vec2f(0, 0), Vec2f(100, 100), IntRect(100, 200, 100, 100), 1));
        walls.push_back(new Tile(tm.getResourceByAlias("WALLS"), Vec2f(0, 0), Vec2f(100, 100), IntRect(100, 300, 100, 100), 1));
        walls.push_back(new Tile(tm.getResourceByAlias("WALLS"), Vec2f(0, 0), Vec2f(100, 100), IntRect(100, 400, 100, 100), 1));
        walls.push_back(new Tile(tm.getResourceByAlias("WALLS"), Vec2f(0, 0), Vec2f(100, 100), IntRect(100, 500, 100, 100), 1));
        BoundingRectangle rect(0, 0, 1000, 1000);
        theMap->generate_map(tiles, walls, rect);
        theMap->checkVisibleEntities(br);

    }
    void init () {
        View view = getWindow().getDefaultView();
        Bind<void(sf::RenderWindow*)> slot (&MyAppli::close, &getWindow());
        closedAction = new Action<sf::RenderWindow*>(slot);

        Bind<void(sf::View*, sf::Keyboard::Key)> slot2 (&MyAppli::keyHeldDown, &view, sf::Keyboard::Key::Unknown);
        moveAction = new Action<sf::View*, sf::Keyboard::Key> (slot2, false);
        sf::Event endEvent1, endEvent2, endEvent3, endEvent4;
        sf::Event event1, event2, event3, event4;
        event1.type = sf::Event::KeyPressed;
        event1.key.code = sf::Keyboard::Key::Z;
        event2.type = sf::Event::KeyPressed;
        event2.key.code = sf::Keyboard::Key::Q;
        event3.type = sf::Event::KeyPressed;
        event3.key.code = sf::Keyboard::Key::S;
        event4.type = sf::Event::KeyPressed;
        event4.key.code = sf::Keyboard::Key::D;

        endEvent1.type = sf::Event::KeyReleased;
        endEvent1.key.code = sf::Keyboard::Key::Z;
        endEvent2.type = sf::Event::KeyReleased;
        endEvent2.key.code = sf::Keyboard::Key::Q;
        endEvent3.type = sf::Event::KeyReleased;
        endEvent3.key.code = sf::Keyboard::Key::S;
        endEvent4.type = sf::Event::KeyReleased;
        endEvent4.key.code = sf::Keyboard::Key::D;
        moveAction->linkEvents(event1, endEvent1);
        moveAction->linkEvents(event2, endEvent2);
        moveAction->linkEvents(event3, endEvent3);
        moveAction->linkEvents(event4, endEvent4);
        System::connect("MouseInside", Function<void> (&MyAppli::mouseInside));
    }
    void render() {

        if (getWindow().isOpen())
        {


        // clear the window with black color
        getWindow().clear(sf::Color::Black);

        std::vector<Entity*> entities = theMap->getVisibleEntities("E_GROUND+E_WALL");// draw everything here...

        for (unsigned int i = 0; i < entities.size(); i++) {
            getWindow().draw(*entities[i]);
        }
        /*entities = theMap->getVisibleEntities("E_WALL");// draw everything here...

        for (unsigned int i = 0; i < entities.size(); i++) {
            getWindow().draw(*entities[i]);shadow = new ShadowWall(*light, this);
        }*/


        // end the current frame
        getWindow().display();
        }

    }
    void update () {
        // check all the window's events that were triggered since the last iteration of the loop

        sf::Event event;
        while (getWindow().pollEvent(event))
        {
            if (event.type == sf::Event::Closed) {
                closedAction->pushEvent(event, event.type);
                closedAction->process();
                running =false;
            }
            if (event.type == sf::Event::KeyPressed || event.type == sf::Event::KeyReleased) {
                moveAction->pushEvent(event, event.type);
                View view = getWindow().getView();
                moveAction->changeParams(&view, event.key.code);
                moveAction->process();
                getWindow().setView(view);
            }
            if (event.type == sf::Event::MouseMoved) {
                Vector2f mousePos = Vector2f(event.mouseMove.x, event.mouseMove.y);
                System::emit ("MouseInside", Vec2f(mousePos.x, mousePos.y));
            }
        }
    }
    void stop() {
        running = false;
    }
    int exec () {
        load();
        init();
        running = true;
        while (running) {
            render();
            update();
        }
        return EXIT_SUCCESS;
    }

    ~MyAppli () {

    }
    private:
        bool running;
        Action<sf::RenderWindow*> *closedAction;
        Action<sf::View*, sf::Keyboard::Key> *moveAction;
};

#endif // MY_APPLI
 

De plus mon système offre la possibilité de gérer ses propres signaux, (Et pas seulement des signaux lié à une action, par exemple, lorsque la souris rentre dans une zone, avec thor, je devrai définir une action pour chaque pixel de la zone)

Citer
Ca serait une thème interessante à discuter, mais il faudrait regarder Thor d'une perspective qui ne couvre pas seulement toi, mais une grande partie des utilisateurs d'SFML. Toi, tu argumentes toujours de tes demandes spécifiques (qui sont souvent très bizarres) est tu n'essaye même pas de comprendre les autres.

Je peux juste répéter ce qui a été dit une douzaine des foix: Comprends les conceptes (en ce cas ceux de Thor) et écoute les gens. Il y en a beaucoup qui ont plus d'éxperience que toi, et ils veulent t'aider, mais pour cela il faut être plus ouvert aux conseils.

Tu me fais pensé lorsque je vais me présenté à un entretient d'embauche pour un poste de programmeur ou me répond à chaque fois ceci : (tu n'as pas assez d'expériences donc ont a pris quelqu'un qui a plus d'expérience que toi)

Ou bien lorsqu'on compare mon expérience avec ma personnalité.

De belles conneries...

Bref je n'ai pas envie de discuter plus longtemps ici, car je perds mon temps, j'ai fais un truc qui marche en y ayant passé beaucoup de temps, c'est l'essentiel, je m'en fou complètement d'avoir +/- d'expérience que les autres ou d'être plus renfermé sur moi même. (Heureusement que y'a des gens plus malin qui ne m'ignorent pas juste à cause de ça)

Au pire je pourrai toujours mettre ça vraiment au point par la suite, bref, tu verras quand mon 1er jeux sera sorti et après tu jugeras mais merci de ne pas me juger n'importe comment.

PS : De plus j'ai dû faire de la prédiction de mouvements, une intelligence artificielle, un entity-system, du chargement de ressource via le réseau, bref, beaucoup de chose que thor n'offre pas. (Et j'ai même commencé à dessiner des objets en 3D et à me déplacer dans la scene.)

Mais bon on peut toujours me reproché d'être fort renfermé sur moi même et de réfléchir beaucoup, tu sais..., si je devais stopper tout mes projets à cause de ça, autant tout abandonné tout de suite.

PS 2 : avoir plus d'expérience que moi c'est : maîtriser html, php, css, JEE, javascript et JQuery, .NET, etc..., maîtriser le c/c++, le java, opengl, openssl, les matrices (transformations et projections en 2d et en 3d), la prédiction de mouvements, l'intelligence artificielle, la maintenance informatique, etc...
Il faut donc aussi bien avoir de bonne bases en math qu'en programmation et aussi en Anglais

Et je pourrai encore en rajouter sur la liste car je n'ai pas cité toutes les choses que j'ai faîtes là.

Dès que la version 1 de SFGL est finie je compte même attaquer la physique et les effets avec les shaders pour vraiment être au top niveau programmation. (Et plus tard je devrais surement m'attaquer à l'infographie et au son)

Bref pour te dire que j'ai du gérer mon projet ambitieux tout seul depuis des année maintenant, alors, je suis peux être fot renfermé sur moi même mais pour avoir plus d'expérience que moi il faut déjà en avoir fait de choses et pas se limiter à l'utilisation d'une librairie.

73
J'y ai pensé mais thor ne répond pas à mes besoins (Si tu as vu ma manière de stocker mes fonctions de callback. :) )

J'ai besoin de stocker des fonctions avec un nombre variable d'arguments et leur passer des arguments plus tard. (Pour les interfaces graphiques (clic sur un bouton, etc...).
Thor si j'ai bien lu la documentation permet de faire ça  uniquement pour une renderwindow. (Sinon il faut utiliser connect et lui passer un std::function ou un std::bind pour l'appeler directement sous peine de devoir faire un foncteur)
Moi je n'ai qu'à faire une fonction, lui passer l'adresse de la renderwindow (ou bien autre chose) et stocker l'adresse de la fonction pour l'appeler plus tard. (Seul inconvénient : on ne peut pas stocker l'adresse d'un pointeur de fonction sur une fonction membre en c++ alors il faut faire une méthode statique qui appelle la fonction membre sur l'objet)

J'ai besoin aussi de pouvoir charger des ressources via des streams, donc, j'ai besoin d'avoir un ressource holder qui possède un pointeur de fonction avec un nombre variable d'arguments vu que je ne charge pas les ressources que via un fichier ou bien via la mémoire. (mais aussi via le réseau)
Et puis c'est bien mieux pour pouvoir faire des streams perso. ^^

Thor est adapté pour des petits jeux comme celui présenté dans le bouquin mais pas vraiment pour des gros jeux je trouve. ^^

J'ai besoin de quelque chose qui permet non seulement de gérer des signaux sur la RenderWindow mais aussi pour des guis.

La seule chose que j'aurai pu reprendre de ta librairie c'est ton système d'actionmap qui je dois l'avoué est bien. (Et aussi peut être ton système de particule, je ne sais pas, je ne l'ai pas encore testé)
Bref je vais faire comme je fait à chaque fois fouiller le code source de plusieurs librairies et prendre seulement ce que j'ai besoin pour l'adapter à la mienne. (C'est la méthode que a toujours le mieux marché chez moi)
Si je dois modifier du code source d'une librairie existante je m'en sors pas (car trop de code d'un coup), et si je dois recréer la mienne entièrement ça ne marche pas non plus car ça prend trop de temps et je n'ai pas toujours suffisamment de connaissances pour pouvoir la réussir aussi bien que certaines librairie déjà existantes..

74
Ok, je pense que je vais faire un système comme celui là alors.

75
Suggestions de nouvelles fonctionnalités / Ajout de flags.
« le: Janvier 02, 2014, 01:26:29 pm »
Re salut, je voudrais faire des flags pour faire par exemple un event déclencheur si on appuie surl'une des touches suivante. (Z, Q, S D)
J'ai essayé ça mais ça ne marche pas :

 sf::Event endEvent;
        sf::Event event;
        event.type = sf::Event::KeyPressed;
        event.key.code = sf::Keyboard::Key::Z | sf::Keyboard::Key::Q | sf::Keyboard::Key::S | sf::Keyboard::Key::D;
        endEvent.type = sf::Event::KeyReleased;
        endEvent.key.code = sf::Keyboard::Key::Z | sf::Keyboard::Key::Q | sf::Keyboard::Key::S | sf::Keyboard::Key::D;
        moveAction->linkEvents(event, endEvent);
 

N'y a t'il pas possibilité de faire des flags avec les événements SFML ?

Se serait bien de pouvoir rajouter ça.

Sinon, me faudrait une piste..., voir même coder ma propre classe Event mais je sais pas du tout comment on gère des flags en interne. :/

Pages: « Précédente 1 ... 3 4 [5] 6 7 ... 53 Suivante »