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

Pages: « Précédente 1 2 [3] 4 5 ... 12 Suivante »
31
Réseau / Re : [SFML 2.1] Erreur de connection en dehors du LAN
« le: Août 17, 2014, 10:47:20 pm »
Le problème a été déjà résolu ici (même si le sujet n'est pas marqué comme résolu) : http://fr.sfml-dev.org/forums/index.php?topic=13734.0

Un tutoriel qui fonctionne si vous êtes chez Free :

32
Projets SFML / Re : SimpleGui
« le: Août 16, 2014, 03:37:50 pm »
Ton système a l'air sympa et pratique mais pour SimpleGui je ne veux pas de dépendance (hormis SFML)

Ensuite, si tu regardes le code j'ai posté en haut :

auto button2 = std::make_shared<SGUI::Button>(*button1);

Ici on copie juste les données car button1 est un Button::Ptr (std::shared_ptr<SGUI::Button) donc *button1 est un Button donc on ne prends pas son addresse

PS : Merci pour cet article, je ne connaissais pas les override et les final ! Je trouve que ça va être utile :)

33
Projets SFML / Re : SimpleGui
« le: Août 16, 2014, 01:21:27 pm »
Tu veux cloner un bouton ? Rien de plus simple :

SGUI::Container container;
auto button1 = container.createButton();
auto button2 = std::make_shared<SGUI::Button>(*button1);
container.addWidget(button2);
 

Il faut juste pas oublier de le rajouter au Container par la suite :)

Mais tu viens de me donner une excellente idée, je vais rajouter un paramètre facultatif à createButton() qui prendra un Button à copier

Les std::shared_ptr sont très bien conçu, il serait dommage de s'en priver...
Leurs avantages sont nombreux :
- Ils "s'autogèrent" pour éviter les erreurs basiques sur les pointeurs
- Ils sont "shared" donc une modification d'un Widget dans le code, entraîne sa modification dans le Container
- Ils restent des pointeurs donc ils permettent le polymorphisme

PS : Les "auto" sont principalement là par feignantise, mais rien ne t'empêche ne pas les utiliser, car je ne les utilise que dans les fonctions d'exemples.

PS 2 : Ensuite les Callback, j'utilise les lambdas et cela fonctionne très bien.

34
Projets SFML / Re : SimpleGui
« le: Août 11, 2014, 10:17:30 pm »
Oui il est tout à fait possible de faire ça :)

Il faut utiliser la fonction Button::setCallback()

Voici un exemple de la gestion d'un bouton, tiré de l'exemple que je donne plus haut :

auto get = std::make_shared<SGUI::Button>(font,texture);
get->setTexture(texture);
get->setFont(font);
get->setString("Get");
get->setPosition(50, 250);
get->setTextureRect(SGUI::Button::Normal, sf::IntRect(0,0,200,50));
get->setTextureRect(SGUI::Button::Active, sf::IntRect(0,50,200,50));
get->setTextureRect(SGUI::Button::Disabled, sf::IntRect(0,100,200,50));
get->setCallback([&] ()
{
    label->setString(line->getString());
});

Ici, un clic sur le bouton entraîne donc la modification du texte d'un Label avec le texte contenu dans une LineEdit, ce qui est plutôt pratique :)

Voilà, si tu as d'autres questions ou suggestions, n'hésite pas ;)

35
Projets SFML / SimpleGui
« le: Août 10, 2014, 09:24:47 pm »
SimpleGui:

SimpleGui est une bibliothèque de GUI pour SFML ayant pour but de gérer les GUI "principaux".
Je me suis inspiré de quelques autres systèmes (https://github.com/Lo-X/potato-framework et https://github.com/SFML/SFML-Game-Development-Book (merci à leurs auteurs))
Mais contrairement à ses systèmes, je voulais que la gestion des évènements se fassent à partir de la souris

On distingue deux types d'objets différents, les Widgets et les Components. Les Widgets sont des GUI et les Components permettent de créer les Widgets plus facilement.

Liste des Widgets :
  • Container : Il va contenir les autres widgets pour les manipuler facilement, il peut être charger depuis un fichier
  • Button : C'est un bouton, il gère 3 états de Sprite différent, la gestion du Callback, et un texte
  • LineEdit : C'est une case qui permet d'écrire du texte et elle gère aussi 3 états de Sprite différent et un Callback
  • Label : C'est juste un texte volant
  • LabelBox : C'est un texte contenu dans une Sprite (à 2 état)
  • CheckBox : C'est une boîte cochable (à 3 états)
  • CheckBoxText : C'est une boîte cochable (à 3 états) et un texte
  • RadioBox : Ce sont des CheckBox mais une seule RadioBox peut être cochée à la fois
  • RadioBoxText : Ce sont des CheckBoxText mais une seule RadioBoxText peut être cochée à la fois
  • Slider : C'est une case qui permet de faire varier une valeur entre un intervalle en déplacant un curseur. Un Slider a 3 états et un Callback
  • ...
  • ... Grâce au système de Components il est facile de créer ses propres Widgets, vous pouvez donc en proposer d'autres ...

Pour obtenir un exemple, c'est ici : https://github.com/Cmdu76/SimpleGui/blob/master/src/main.cpp
Pour obtenir les sources, c'est ici : https://github.com/Cmdu76/SimpleGui/

Si vous avez des critiques, des suggestions ou des remarques, je suis preneur :)

36
Oui, j'ai en effet trouver un moyen assez simple de contourner mon problème, si je poste ici c'est juste pour suggérer l'ajout de ces méthodes

37
Bonjour,

Je suis en train de travailler en profondeur sur les sf::Window

Serait-il possible de rajouter quelques fonctions :

- getMouseCursorVisible()
- getTitle()
- getVerticalSyncEnabled()
- getKeyRepeatEnabled()
- getFramerateLimit()
- ... (et quelques autres)

Voilà, je suis dans un cas où je charge les paramètres de la fenêtre via un fichier de paramètres (grâce à la classe Parser sur le wiki qui est top  :)) et j'aimerais savoir ensuite les paramètres utilisés plus loin dans mon programme pour connaître l'état de getMousCursorVisible() pour savoir si je dois dessiner ma propre souris ou pas ...

Je pense que mon exemple est peut-être un peu trop "centré" mais je pense que ces méthodes seront plutôt utiles

38
Général / Re : Altitude simulée
« le: Juillet 11, 2014, 01:43:43 am »
Oui finalement, je pense que c'est ce qu'il y a de plus simple, la STL possède une fonction de tri (std::sort) selon un paramètre donné, donc ici ton z-index.

39
Général / Re : Altitude simulée
« le: Juillet 10, 2014, 11:27:07 pm »
Pourquoi tu ne mets pas ton hélicoptère sur les deux calques et tu dessines que le calque actif ?

(En tout cas le jeu à l'air sympa  :) )

40
Général / Re : [Sfml 2.1]Tile isométrique
« le: Juillet 09, 2014, 02:38:29 am »
Pourquoi ne pas directement passer par un tileset isométrique ?

http://www.nox-rhea.org/tutoriaux/3Disometrique

Adaptation en C++ :

for(size_t x = 0; x < MAP_X; x++)
{
    for(size_t y = 0; y < MAP_Y; y++)
    {
        sf::Vector2f position;
        position.x = (x-y)*(TILESIZE/2);
        position.y = ((x+y)/2)*(TILESIZE/2);
        mSprite.setPosition(position);
    }
}

41
Général / Re : Game States - ChangeStates
« le: Juillet 09, 2014, 02:27:06 am »
J'ai pris un exemple de ton code dans MenuState.cpp :

if(m_selectedItem == 1) {
                            m_next = StateMachine::build<PlayState>(m_machine, m_window, true);
                        } else if(m_selectedItem == 2) {
                            m_next = StateMachine::build<OptionsState>(m_machine, m_window, false);
                        } else if(m_selectedItem == 3) {
                            m_next = StateMachine::build<QuitterState>(m_machine, m_window, false);
                        }

Et oui, ça me paraît bien :)

Il me semble, que pour passer d'un State à l'autre il faut bien faire comme cela

Par contre il faut initialiser la StateMachine avec run() (mais c'est fait dans la fonction Application::run() :
m_machine.run( StateMachine::build<IntroState>( m_machine, m_window, true ) );


42
Général / Re : Game States - ChangeStates
« le: Juillet 08, 2014, 02:05:57 am »
Bonsoir,

Voici le lien d'une StateMachine plutôt cool en C++ (c'est pas de moi c'est de eXpl0it3r :) )

https://github.com/eXpl0it3r/SmallGameEngine

Sinon si tu es nouveau, je te conseille fortement d'aller voir ici :

https://github.com/SFML/SFML-Game-Development-Book

Il y a un chapitre sur les States qui est très bien construit :)



Sinon, par rapport à tes fichiers...

Pourquoi recrées-tu tes objets à chaque passage dans la boucle dans Menu::Draw ??? Cela prends beaucoup de temps pour une fonction a besoin d'être très rapide... Tu dois donc sauvegarder tes objets en tant que membres dans ta classe Menu (si tu viens vraiment du C et que tu ne comprends rien à ce que je viens de dire, cherche un cours sur la POO : http://fr.openclassrooms.com/informatique/cours/programmez-avec-le-langage-c/introduction-la-verite-sur-les-strings-enfin-devoilee)

Ensuite, je pense que voir les .h / .hpp de tes classes peut être utile :)

Petite remarque aussi, utilise les std::string à la place des const char* c'est plus C++ et personnellement c'est beaucoup plus simple :)

Petite remarque encore, en C++ tu peux aussi utiliser des références à la place de mettre des pointeurs partout (ça évite surtout de faire pas mal d'erreurs de mémoires)


Voilà, je te souhaite bonne chance :)
Le C++ est bien différent du C et la transition est un peu dure au début :)

43
Audio / Re : Conteneurs de musiques
« le: Juillet 01, 2014, 03:00:03 pm »
Merci beaucoup Eho :)

On m'avait conseillé d'utiliser plus souvent des .at() plutôt que l'opérateur [], il faut croire que chaque méthode a ses avantages :)

Sujet résolu :)

44
Audio / Re : Conteneurs de musiques
« le: Juillet 01, 2014, 12:07:57 am »
Eh bien je pensais aussi au départ mais apparement nan...

Je crois que mon sf::Music a besoin d'être initialisé...

Voici l'erreur retournée :

terminate called after throwing an instance of 'std::out_of_range'
  what():  map::at

45
Graphique / Re : Collision avec intersects
« le: Juin 30, 2014, 10:43:25 pm »
Voici la fonction que j'utilise pour gérer ce cas :

sf::Vector2f CollisionManager::handleCollision(sf::FloatRect box)
{
    sf::Vector2f movement;
    if(isCollide(box)) // J'utilise un conteneur de toutes les entités créant des collisions et je teste si "box" entre en collision
    {
        sf::FloatRect rect = getRectCollide(box); // Ici je récupère la première entité qui entre en collision avec ma "box"

        sf::Vector2f diff = sf::Vector2f(rect.left - box.left, rect.top - box.top);
        sf::Vector2i dir;

        if(diff.x > 0 && diff.x < box.width)
            dir.x++;
        if(diff.x < 0 && diff.x > -rect.width)
            dir.x += 2;
        if(diff.y > 0 && diff.y < box.height)
            dir.y++;
        if(diff.y < 0 && diff.y > -rect.height)
            dir.y += 2;

        // HANDLE SIMPLE COLLISION
        if(dir == sf::Vector2i(1,0))
            movement.x--;
        else if(dir == sf::Vector2i(2,0))
            movement.x++;
        else if(dir == sf::Vector2i(0,1))
            movement.y--;
        else if(dir == sf::Vector2i(0,2))
            movement.y++;

        // HANDLE DOUBLE COLLISION
        else if(dir == sf::Vector2i(1,1))
        {
            if(-abs(diff.x)+box.width < -abs(diff.y)+box.height)
                movement.x--;
            else
                movement.y--;
        }
        else if(dir == sf::Vector2i(2,2))
        {
            if(rect.width - abs(diff.x) < rect.height - abs(diff.y))
                movement.x++;
            else
                movement.y++;
        }
        else if(dir == sf::Vector2i(1,2))
        {
            if(-abs(diff.x)+box.width < rect.height - abs(diff.y))
                movement.x--;
            else
                movement.y++;
        }
        else if(dir == sf::Vector2i(2,1))
        {
            if(rect.width - abs(diff.x) < -abs(diff.y)+box.height)
                movement.x++;
            else
                movement.y--;
        }
    }
    return movement;
}
 

Voilà j'espère que cela aidera :)

Si tu as besoin je peux publier mon CollisionManager en entier :)

Pages: « Précédente 1 2 [3] 4 5 ... 12 Suivante »