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.


Sujets - Cmdu76

Pages: [1] 2 3 4 Suivante »
1
Site web SFML / Mini erreur sur le tutoriel OpenGL
« le: Juillet 13, 2016, 12:15:18 pm »
Bonjour,

Je viens de remarquer une petite faute sur le tutoriel OpenGL.

Citer
Ainsi, vous devrez savoir quelle bibliothèque lier selon l'OS que vous utilisez ("opengl" sous Windows, "GL" sous Linux, etc.)

Sur le site Anglais c'est bien marqué "opengl32" et ça fonctionne.

En espérant que ça aide certains :)


2
Système / Rendu et logique dans des threads séparés
« le: Juillet 01, 2016, 05:55:38 am »
Bonjour à tous,

Je suis en train d'essayer de séparer rendu et logique dans des threads différents.
Je n'arrive pas totalement à comprendre les mutex et le tutoriel du site sur les threads est un peu trop simple.

Si quelqu'un a un peu de temps peut-il me dire où je dois mettre les mutex dans cet exemple : https://gist.github.com/Cmdu76/0f4d7b579e3a86072782d9d64c3d006f

Ou alors m'expliquer rapidement comment faire. Parce qu'en fait j'ai l'impression que la fenêtre sera bloquée trop souvent et que le multi-threading ne servirait à rien.

Ou encore même un exemple ou un tutoriel un peu plus complexe que celui du site, en anglais ou français peu importe.

Et aussi on m'a dit que la lecture des variables (par exemple : window.isOpen()) ne posaient pas de problèmes thread-safe mais est-ce vrai ? Car ce n'est dit nul part dans les tutoriels que j'ai pu lire.

Merci d'avance pour votre aide !

3
Bonjour,

Je souhaiterais proposer une petite fonctionnalité, qui ce serait de rajouter des fonctions en plus à sf::Transformable, comme onMoved, onScaled, onRotated...

Cela peut être utile dans le cas où, par exemple on déplace un objet dérivant de sf::Transformable et qu'on veuille effectuer une action à chaque déplacement, pour cela, on aurait juste à créer la fonction et elle serait automatiquement appelée.

4
Discussions générales / Environemment Android
« le: Février 22, 2016, 10:09:23 pm »
Bonjour à tous,

Je suis en train de commencer à apprendre à utiliser SFML sur Android.

Actuellement j'essaye de porter mes quelques jeux réalisés avec SFML, c'est déjà le cas pour 2 mais en fait je me sers de l'example fourni avec SFML et de ce tutoriel : https://github.com/SFML/SFML/wiki/Tutorial:-Building-SFML-for-Android

Je modifie donc les fichiers Android.mk et autres à la main en essayant de modifier un minimum de choses.
Et pour coder je suis avec Notepad++ et je compile en ligne de commande.

Il n'y aurait pas une façon de faire ça plus simplement ? Comme un IDE spécialisé ?

J'ai vu Android Studio mais je n'ai pas trouvé sur la doc Android comment travailler avec le NDK et les liens Google le proposant paraisse un peu comme des "hacks".
Il y a aussi Eclipse mais apparemment, Android nous conseille Android Studio.

Qu'utilisez-vous ?/que recommandez-vous ?

Et aussi, où puis-je avoir plus de contenu pour apprendre comment manipuler les fichiers de types Android.mk ?

Merci d'avance :)

5
Projets SFML / [LudumDare31] Tehos
« le: Décembre 08, 2014, 05:21:35 pm »
Salut à tous !

Voici le jeu que j'ai réalisé durant mon premier Ludum Dare qui a eu lieu ce week-end.

Tehos

Le but du jeu est de protéger une base contre une horde d'ennemis.
Pour cela vous pouvez envoyer des soldats sur le champ de bataille.
Vous pouvez aussi les équiper avec de puissantes armes disponibles auprès du marchand dans votre base.

Windows : https://github.com/Atmog/LudumDare31/releases/download/1/Tehos.zip
Sources : https://github.com/Atmog/LudumDare31/archive/master.zip

PS : Si quelqu'un est sur Linux, pourrait-il m'expliquer comment le partager facilement ? Sachant que je suis sur Ubuntu 64
(En fait je veux savoir si mettre des .so 32 avec le fichier ça marcherait ?)


6
Système / Problème avec sf::Time
« le: Octobre 08, 2014, 06:18:42 pm »
Bonjour,

Je suis sur un projet et j'ai une erreur très très bizarre...

J'utilise une classe Application, fortement inspirée du livre sur SFML. Cette classe a une méthode écrite ainsi :

void Application::run()
{
    sf::Clock clock;
        sf::Time timeSinceLastUpdate = sf::Time::Zero;
        const sf::Time TimePerFrame = sf::seconds(1/60);
        while (mContext.window->isOpen())
        {
                timeSinceLastUpdate += clock.restart();
                while (timeSinceLastUpdate > TimePerFrame)
                {
                        timeSinceLastUpdate -= TimePerFrame;

                        handleEvents();
                        update(TimePerFrame);

                        std::cout << TimePerFrame.asSeconds() << " " << TimePerFrame.asMilliseconds() << " " << TimePerFrame.asMicroseconds() << std::endl;

                        if (mStates.isEmpty())
                                mContext.window->close();
                }
                render();
        }
}

Comme vous le voyez, j'ai une variable TimePerFrame qui est une constante et qui est égale à sf::seconds(1/60).
Normalement, la valeur ne peut pas changer. Donc la ligne avec les std::cout devrais m'afficher :

1/60 100/6 100000/6

Mais la ligne que j'obtiens affiche que des zéros...

Pourquoi ???

Je suis sur Ubuntu 14.04

Edit : Je viens de recompiler SFML, rien n'y fait...

7
Projets SFML / AudioManager
« le: Octobre 02, 2014, 03:24:43 pm »
Bonjour à tous !

Je viens présenter un court projet sur la gestion simplifiée de l'audio avec SFML.

J'ai débuté ce projet il y a déjà quelques mois puis ensuite je suis reparti de 0 car il était trop brouillon et pas si simple à utiliser, mais cette version "test" m'a forcée à réfléchir sur cette nouvelle version.


Le but du projet est donc de n'avoir presque rien à gérer pour l'audio.

Le projet propose 2 classes :

- AudioFile : Contient le nom, le nom de fichier et le type d'une ressource audio. Elle contient aussi les données que fournissent les classes Music et Sound (position, volume, pitch, etc...)

- AudioManager : Permet de créer des AudioFiles et de les gérer. Gestion des ressources audio (sf::Music et sf::Sound). Gestion des sf::SoundBuffer automatique.

Voici un exemple :
#include <AudioManager.hpp>
#include <SFML/System.hpp>

int main()
{
    // Création d'un AudioManager
    am::AudioManager mgr;

    // Création d'un AudioFile (qui sera aussi contenu dans notre AudioManager)
    // Vous pouvez choisir le type de la ressource que vous voulez utiliser
    // Ne JAMAIS créer un AudioFile vous même, passez TOUJOURS par un AudioManager !
    am::AudioFile::Ptr a = mgr.create(am::FileType::Music,"test.ogg","test");
    // On aurait pu aussi faire :
    // am::AudioFile::Ptr a = mgr.createMusic("test.ogg","test");

    // Maintenant on veut jouer une musique (Les 3 lignes suivantes font la même chose) :
    mgr.play("test");   // Grâce au nom d'un AudioFile
    mgr.play(a);        // Grâce à un pointeur vers notre AudioFile
    a->play();          // Directement avec notre pointeur (/!\ Votre pointeur provient bien de Manager::create /!\)

    sf::Clock clock;
    while(clock.getElapsedTime() < sf::seconds(2))
    {
        // Mise à jour de l'AudioManager, qui va supprimer les ressources inutiles (stoppées)
        mgr.update();
    }

    return EXIT_SUCCESS;
}


Liste des prochaines améliorations :
- Gestion de Playlist
- Gestion de SoundGroup
- ...

Voilà, donnez vos avis et vos idées :)



8
Audio / Music ou Sound ?
« le: Septembre 30, 2014, 06:58:20 pm »
Bonjour, je travaille actuellement sur une classe de gestion de l'audio.

J'aimerais savoir dans quel cas est-il préférable d'utiliser un sf::Music ou un sf::Sound & sf::SoundBuffer ?

Cela est bien en rapport avec la taille du fichier ? Si oui quelle taille est la "limite" approximative entre les deux ?

Voilà, merci beaucoup :)

9
Graphique / [Résolu] Problème application de sf::Transform sur VertexArray
« le: Septembre 23, 2014, 11:32:28 pm »
Bonjour,

Je travaille sur une TileMap qui peut être (ou pas) isométrique.
Ma classe TileMap hérite de Drawable et Transformable.

Mes Tiles sont de parfaits carrés (à la base), j'essaye donc de les modifier pour les afficher en isométrique (2.5D)

-> rotate(45)
-> scale(1,0.5)

(Je ne veux pas affecter ma vue, juste le rendu du VertexArray)

Voici sans plus tarder, ma fonction draw :
void TileMap::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
    if(mTexture != nullptr) // mTexture est du type : std::shared_ptr<sf::Texture>
        states.texture = &(*mTexture);
    if(mIsometric) // mIsometric est un booleen qui indique si le VertexArray est isométrique ou non
    {
        sf::Transform t0, t1, t2;
        t0.translate(200,50); // Juste pour le rendu sur ma screenshot qui vient
        t1.rotate(45); // Première transformation
        t2.scale(sf::Vector2f(1,0.5)); // Deuxième

        states.transform *= getTransform() * t0 * t1 * t2;
    }
    else // Si le VertexArray n'est pas isométrique
    {
        states.transform *= getTransform();
    }

    target.draw(mBackground,states);
}

Vous le verrez dans le code précèdent ou dans la screenshot suivante, mon rendu n'est pas celui escompté.
Mon VertexArray est tourné et rétréci en même temps, ce qu'il fait que je me retrouve avec des rectangles inclinés et non des losanges comme je les voulais...

Voici la fameuse scrennshot en pièce jointe

Merci d'avance :)

10
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 :)

11
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

12
Audio / Conteneurs de musiques
« le: Juin 30, 2014, 10:02:01 pm »
Bonjour,

Je travaille actuellement sur un projet pour une gestion de l'audio simplifiée

J'aimerais stocker des sf::Music dans un std::map

Mais le problème est que je n'arrive pas à initialiser la musique directement dans le std::map...

Voilà un exemple qui sera bien plus clair :

std::map<std::string,sf::Music> mMusics;

/*
Le fait que sf::Music soit NonCopyable m'empêche de faire ceci :

sf::Music a;
mMusics.at(filename) = a;
*/


    if(!mMusics.at(filename).openFromFile(filename))
        return false;
    mMusics.at(filename).play();
 

Voilà, je recherche s'il en existe, une façon de faire :)

13
Audio / SoundSource et Status en protected
« le: Juin 22, 2014, 08:03:18 pm »
Bonjour,

J'aimerais savoir s'il y a une raison particulière au choix de mettre la fonction getStatus() en protected à la place de public dans les SoundSource ?

Je suis actuellement sur un projet et le fait de passer par les SoundSource est beaucoup plus simple que de refaire ma fonction plusieurs fois pour Music, pour Sound et pour mes classes héritant de SoundSource

Voilà un exemple de fonction qui bloque à cause de cela :

bool isPlaying(sf::SoundSource const& source)
{
    return source.getStatus() == sf::SoundSource::Status::Playing;
}

bool isPaused(sf::SoundSource const& source)
{
    return source.getStatus() == sf::SoundSource::Status::Paused;
}

bool isStopped(sf::SoundSource const& source)
{
    return source.getStatus() == sf::SoundSource::Status::Stopped;
}


Je l'ai contré actuellement en faisant comme ceci (mais c'est 4x fois moins simple dans le code appelant ces fonctions...) :

bool isPlaying(sf::SoundSource::Status const& statut)
{
    return statut == sf::SoundSource::Status::Playing;
}

bool isPaused(sf::SoundSource::Status const& statut)
{
    return statut == sf::SoundSource::Status::Paused;
}

bool isStopped(sf::SoundSource::Status const& statut)
{
    return statut == sf::SoundSource::Status::Stopped;
}


Voilà, merci d'avance pour la réponse et si il existe une bonne raison, je vais me résigner à employer ma deuxième méthode :)

14
Général / Problème avec les templates...
« le: Janvier 06, 2014, 04:46:37 pm »
Bonjour à tous :)

Je travaille actuellement sur un projet de gestion de States pour SFML

J'ai récemment essayé d'adapté le framework du livre sur la SFML mais le problème était qu'il n'était pas trop possible de faire partager les informations du jeu entre plusieurs states, car le système de Context est propre au framework et donc pas vraiment pratique...

Du coup j'ai voulu implémenter ça avec des templates.

J'ai une petite erreur "undefined reference"...

Je sais pourquoi j'ai cette erreur :
J'ai deux classes et chacune utilise des templates que je déclare donc dans le .hpp de ma classe.
Et chacune des fonctions utilisant des templates à besoin d'inclure l'autre pour travailler avec...

State.hpp :
class StateManager;

class State
{
    template<typename T>
    void send(T object);

    template<typename T>
    void receive(T object);
};

#include "State.inl"
 

State.inl :

template <typename T>
void State::send(T object)
{
    mMgr->share<T>(object);
}

template <typename T>
void State::receive(T object)
{
//
}
 

StateManager.hpp :
class State;

class StateManager
{
    public:
        template <typename T>
        void share(T object);
};

#include "StateManager.inl"
 

StateManager.inl :
template <typename T>
void StateManager::share(T object)
{
    state->receive(object);
}


Voilà je vous ait réduit les fichiers au max, en laissant tout ce qui devrait être utile :)

Si quelqu'un pourrait m'aider ça serait plutôt cool car le projet serait utilisable par tout le monde :)

Le projet est actuellement sur GitHub et c'est la dernière fonctionnalité que je prévois d'ajouter pour le moment

Merci d'avance : https://github.com/Cmdu76/CmState

15
Graphique / Problème avec la fonction draw
« le: Décembre 24, 2013, 03:09:50 pm »
Bonjour à tous :)

Je travaille sur un projet de Tile Mapping (oui je sais c'est pas original xD)
J'essaye que chacune de mes Tiles puissent gérer 3 couches de rendus, (plus facile pour gérer les Collisions de dire que la Tile entière entraîne une collision)

Mes tiles sont contenus dans ma classe Zone, et les Zones sont contenues dans ma classe World

Le World a donc un fonction draw comme ça :

void World::draw()
{
    mApp.setView(mWorldView);
    mActualZone->draw(mApp, Layer::Sol);
        mApp.sf::RenderTarget::draw(mSceneGraph); // mApp est de type Application qui hérite de pas mal de trucs dont plusieurs fonctions draw --> Je sais c'est pas tip-top...
}

Ensuite une zone se dessine comme ça :

void Zone::draw(sf::RenderWindow& window, Layer::ID const& layer) const
{
    for (int i = mZoneBounds.left/32; i < mZoneBounds.left/32 + mZoneBounds.width/32; ++i)
    {
        for (int j = mZoneBounds.top/32; j < mZoneBounds.top/32 + mZoneBounds.height/32; ++j)
        {
            mZone[i][j].draw(window,layer);
        }
    }
}

mZone est un : std::vector<std::vector<Tile>>

Ensuite, vous pouvez le deviner, une Tile se dessine comme ça :

void Tile::draw(sf::RenderWindow& window, Layer::ID const& layer) const
{
    if (layer < Layer::Count)
    {
        window.draw(mSprites[layer]);  /// C'est ici que le debugger marque une erreur
    }
}

Et au cas où, je vous montre ça :

namespace Layer
{
    enum ID
    {
        Sol = 0,
        Mid = 1,
        Top = 2,
        Count = 3,
    };
}

Et quand je défini mSprites (dans Tile), c'est un std::array d'une taille de Layer::Count (3, une case / couche)

Quand je lance un coup de debugger, j'obtient :

#0 68ED3151     sf::RenderTarget::draw(this=0x28fba0, drawable=..., states=...) (D:\developpement\sfml\sfml\src\SFML\Graphics\RenderTarget.cpp:147)
#1 00403FB3     Tile::draw(this=0x0, window=..., layer=@0x28fa2c: Layer::Sol) (C:\ProjetsC++\src\Tile.cpp:21)
#2 00404DB3     Zone::draw(this=0x3ba00e8, window=..., layer=@0x28fa2c: Layer::Sol) (C:\ProjetsC++\src\Zone.cpp:54)
#3 00404589     World::draw(this=0x3b85550) (C:\ProjetsC++\src\World.cpp:17)
#4 00403D82     GameState::draw(this=0x3b85548) (C:\ProjetsC++\src\GameState.cpp:11)
#8 0040155A     Application::Application(this=0x28fb78) (C:\ProjetsC++\src\Application.cpp:12)
#9 00401435     main() (C:\ProjetsC++\main.cpp:5)
 

Voilà, si le problème est connu ou que je suis tout simplement trop bête pour le voir... J'aimerais bien un petit coup de main :)

Edit: Bon j'ai essayé de trouver dans mon coin mais j'ai rien de bien...

Voilà ma nouvelle fonction pour Tile::draw :

void Tile::draw(sf::RenderWindow& window, Layer::ID const& layer) const
{
    if (layer < Layer::Count)
    {
        std::cout << mSprites.at(0).getPosition().x << std::endl; // Nouvelle Ligne de l'erreur...
        window.draw(mSprites.at(0));
    }
}

Maintenant la ligne de l'erreur a changée... Et je n'ai aucune idée de pourquoi l'erreur pourrait venir de cette ligne...

Voilà la déclaration de mSprites : std::array<sf::Sprite,  Layer::Count>   mSprites;

Et voilà son initialisation :

// On crée les sprites en fonction des codes
    for (unsigned int i = 0; i < Layer::Count; ++i)
    {
        mSprites[i].setTexture(mTexture);
        mSprites[i].setPosition(pos);
     mSprites[i].setTextureRect(sf::IntRect(posTexture.x,posTexture.y,32,32));
    }

Pages: [1] 2 3 4 Suivante »
anything