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

Pages: [1] 2 3 Suivante »
1
Graphique / sf::Texture et sf::Image
« le: Mai 21, 2015, 06:57:54 pm »
Bonjour.

Je viens de comprendre, sauf erreur, qu'une sf::Texture était chargé sur la carte graphique et une sf::Image, dans la ram.

Une question me taraude alors : serait-t-il normal de charger une même texture et en tant que sf::Texture et sf::Image ?

2
Graphique / utilisation des pixels
« le: Mai 20, 2015, 02:14:07 pm »
Bonjour.

J'aimerais faire des collisions au pixel. Existe-t-il un moyen avec la SFML, de vérifier les pixels vides d'une image png ?

Merci si vous pouvez m'aider

3
Général / programmation ECS
« le: Avril 15, 2015, 09:47:06 pm »
Bonjour.

Après avoir présenté mon programme sur developpez, on m'a parlé du ECS. Après réflexion, j'ai décidé de l'utiliser pour mon programme, quitte à reprendre de nombreuses choses.

Que pensez vous du ECS, et en particulier au niveau des perfs, pour par ex, un STR ?

4
Fenêtrage / touche du clavier relachée
« le: Avril 09, 2015, 05:22:15 pm »
Bonjour.

Existe-t-il une fonction spécial pour savoir si une touche du clavier est enfoncé ou non ?
J'ai essayé avec "Unknown", mais sans résulat :


    if ( !sf::Keyboard::isKeyPressed( sf::Keyboard::Unknown ) )
    {
        _keyControl = true ;
    }
    if ( sf::Keyboard::isKeyPressed ( sf::Keyboard::A ) && _keyControl  )
        {
            _keyControl = false ;
            doAlotOfAwsomeThings() ;
        }
 

or ca marche pour un clic :


    if ( !sf::Mouse::isButtonPressed( sf::Mouse::Left ))
    {
        _clicControl = true ;
    }

 

Lu but étant naturellement que quand une touche est pressée, la fonction ne soit utilisé qu'une seul fois...

5
Graphique / Gérer des pixels
« le: Avril 03, 2015, 09:35:26 pm »
Bonjour.

J'ai besoin de faire un rectangle pour une minimap. Je peux le bricoler avec des vertexs, mais j'aimerais savoir s'il est possible de gérer les pixels avec la SFML assez facilement, afin de faire quelque chose de plus propre, plus simple, et moins coûteux ( même si c'est pas grand chose )?

Merci si vous pouvez m'aider ;)

6
Général / license SFML
« le: Mars 20, 2015, 05:31:57 pm »
Bonjour.

Une question concernant la license SFML : est-ce une licence approuvée par l'Open Source Initiative ?

7
Audio / spatialisation du son
« le: Mars 15, 2015, 10:55:16 am »
Bonjour.

Il y a quelque chose avec la spatialisation du son que j'ai du mal à cerner :

dans mon cas, si je bouge la position d'un sond, il est bien atténué comme il faut.
Si en revanche, je bouge le listener seulement, il n'est pas atténué :

création du son :


void ENTITY_Sound::create( sf::SoundBuffer *buffer )
{

    sf::Sound sound ;
    sound.setBuffer ( *buffer ) ;
    sound.setRelativeToListener(true);
    sound.setMinDistance ( 100 ) ;
    sound.setAttenuation( 10 );
    sound.setLoop( true ) ;
    _sound.push_back( sound ) ;

}

 


exemple 1 : je bouge le son seulement en apuyant sur G . Ca marche.


    if ( sf::Keyboard::isKeyPressed ( sf::Keyboard::G ) )
    {
        _test += 10 ;
    }

    for ( auto& it : _sound )
    {
        sf::Listener::setPosition ( 0, 0, 0 ) ;
        it.setPosition( _test  , _test  , 0 ) ;
    }

 

exemple 2 : je bouge le Listener seulement en apuyant sur G . Ca ne marche pas.


    if ( sf::Keyboard::isKeyPressed ( sf::Keyboard::G ) )
    {
        _test += 10 ;
    }

    for ( auto& it : _sound )
    {
        sf::Listener::setPosition ( _test  , _test  , 0 ) ;
        it.setPosition( 0 , 0 , 0 ) ;
    }

 

Avez vous une explication ?

Merci si vous pouvez m'aider.

8
Projets SFML / BigBang Element / FireQuest
« le: Mars 13, 2015, 07:15:01 pm »
Bonjour.

Je me permet de vous présenter mon projet de jeu vidéo : BigBang Element / FireQuest.

synopsis :

Dans le chaos du Big Bang de l'univers, vous devez réunir tous les élémentaires sur la terre pour générer la vie !

le jeu :

Le joueur doit faire passer des élémentaires d'une borne à l'autre, à travers un environnement interactif . Dans la première partie, il s'agit, comme le titre le suggère, de l'élémentaire de feu ( fireQuest ) .

GamePlay :

Dès que l'élémentaire quitte sa borne, il perd de l'énergie et doit pour survivre se recharger, à l'aide , par exemple, de morceaux de charbons qui, à son contact , génèrent de l'énergie . Il est également rattaché à sa borne par une trainnée de feu, qui l'alimente continuellement, à condition qu'il reste dans son rayon d'action. S'il en sort , la traînée se rompt et l'élémentaire est autonome ( perdant donc de l'énergie ).

Pour franchir les niveaux, il faut interagir avec l'environnement : ex , de la glace bloque le passage, utiliser les actions de l'élémentaire ( jet de boule de feu, onde de feu etc...) pour la faire fondre.  autre ex, des elementaires d'eau qui se déplacent et peuvent générer du dégât si on les touche , etc...

déplacement avec QZDS ou clic droit ( a voir ), tir de boule de feu clic gauche enfoncé, onde de feu barre d'espace.
clic gauche sur la pierre de feu pour l'activer.
Nombre de vie indiqué sur l'interface centrale. tombe à zéro et le niveau recommence.


Programmation :

Pour mener à bien ce projet, j'ai construit un petit moteur dans le but de pouvoir implémenter des éléments facilement. Voici, dans les grandes lignes, ses carractéristiques :

il comporte 4 grands types d'objets actifs : les HUD, les objets de base, les élémentaires, et les terminaux ( bornes ).
Chaque objet dispose de 3 entités qui communiquent entre elles: les Graphics, les Physics et les States, et vont automatiquement gérer les lights et les collisions.

la construction des niveaux et des objets du jeu se fait depuis des fichiers textes sur le disque dur.

un éditeur de niveau, permet, à l'aide du clavier, de créer/modifier des niveaux.


état du développement :

4 niveaux sont jouables, ( le 4ème n'est pas terminé. ).
Quelques assets graphics de bases sont implémentés, mais à retravailler.

Pour l'instant, donc, le projet est au stade embryonnaire.

objectif :

Mon objectif est de finir cette première partie du jeu pour PC en mai 2015, de le présenter en temps que jeu indépendant à différents organismes, tout en ayant bâti un moteur solide permettant de poursuivre le jeu et de l’adapter sur androïde.

Pour se faire, l'aide de testeurs me sera nécessaire, et je remercie par avance ceux qui sont susceptibles de bien vouloir m'aider à tester, de temps en temps, le jeu, lors d'une avancé.

Pour pouvoir tester mon programme, merci de me contacter en mp.

Mazertys17

9
Graphique / découper une sprite
« le: Mars 13, 2015, 09:52:35 am »
Bonjour.

Je cherche a découper une sprite, et , avant de me lancer dans des concepts compliqués , j'aimerais savoir si vous connaissez une solution simple, adapté ?

mon objectif : transformé une texture sprite en une texture ne comprenant qu'une partie de l'image . ex :


    _vertex[0].position = sf::Vector2f( x                              , y ) ;
    _vertex[1].position = sf::Vector2f( x + _imageSizeX                , y ) ;
    _vertex[2].position = sf::Vector2f( x + _imageSizeX                , y + _imageSizeY ) ;
    _vertex[3].position = sf::Vector2f( x                              , y + _imageSizeY ) ;

    _vertex[0].texCoords = sf::Vector2f( _counterX  * _imageSizeX                      , _counterY  * _imageSizeY ) ;
    _vertex[1].texCoords = sf::Vector2f( _counterX  * _imageSizeX   + _imageSizeX      , _counterY  * _imageSizeY ) ;
    _vertex[2].texCoords = sf::Vector2f( _counterX  * _imageSizeX   + _imageSizeX      , _counterY  * _imageSizeY +  _imageSizeY ) ;
    _vertex[3].texCoords = sf::Vector2f( _counterX  * _imageSizeX                      , _counterY  * _imageSizeY +  _imageSizeY ) ;

        _transfomableTexture.iDontKnowWhat( ??! , _vertex , ??!! ) ; // découpage de la texture ?!

        myFonction.setTransformableTexture ( _transformableTexture ) ; // la j'envoi la nouvelle texture où j'ai besoin


 

Et obtenir ainsi une texture n'ayant pour dimention les " texCoords " de l'anciène texture. L'objectif est, naturellement , que se soit le plus légers possible afin de réaliser l'opération à chaque frame d'animation.

Merci si vous pouvez m'aider .

10
Graphique / Petite question à propos des vertex
« le: Mars 09, 2015, 10:45:10 am »
Bonjour.

J'ai un petit pb avec les vertex. Rien de bien méchant , j'aimerais simplement savoir si c'est normal :

Lorsque j'essaie de changer le couleur / alpha des vertex , je me vois obligé de procéder après le positionnement pour que cela prenne effet. Si je procède au changement de couleur avant, il n'est pas pris en compte.

 ex :


            _vertex[0] = sf::Vector2f( x                                  , y ) ;
            _vertex[1] = sf::Vector2f( x +  _pictureSize.x                , y ) ;
            _vertex[2] = sf::Vector2f( x +  _pictureSize.x                , y + _pictureSize.y  ) ;
            _vertex[3] = sf::Vector2f( x                                  , y + _pictureSize.y ) ;

            for ( int i = 0 ; i < 4 ; i ++ )
            {
                _vertex[i].color.a = _alpha ;
            }

            _vertex[0].texCoords = sf::Vector2f( _counterX  *  _pictureSize.x                              , _counterY  * _pictureSize.y  ) ;
            _vertex[1].texCoords = sf::Vector2f( _counterX  *  _pictureSize.x     +  _pictureSize.x        , _counterY  * _pictureSize.y  ) ;
            _vertex[2].texCoords = sf::Vector2f( _counterX  *  _pictureSize.x     +  _pictureSize.x        , _counterY  * _pictureSize.y  +  _pictureSize.y  ) ;
            _vertex[3].texCoords = sf::Vector2f( _counterX  *  _pictureSize.x                              , _counterY  * _pictureSize.y  +  _pictureSize.y  ) ;

 

ca ne prend pas effet. En revanche, comme suit, ca marche :



            for ( int i = 0 ; i < 4 ; i ++ )
            {
                _vertex[i].color.a = _alpha ;
            }


            _vertex[0] = sf::Vector2f( x                                  , y ) ;
            _vertex[1] = sf::Vector2f( x +  _pictureSize.x                , y ) ;
            _vertex[2] = sf::Vector2f( x +  _pictureSize.x                , y + _pictureSize.y  ) ;
            _vertex[3] = sf::Vector2f( x                                  , y + _pictureSize.y ) ;

            _vertex[0].texCoords = sf::Vector2f( _counterX  *  _pictureSize.x                              , _counterY  * _pictureSize.y  ) ;
            _vertex[1].texCoords = sf::Vector2f( _counterX  *  _pictureSize.x     +  _pictureSize.x        , _counterY  * _pictureSize.y  ) ;
            _vertex[2].texCoords = sf::Vector2f( _counterX  *  _pictureSize.x     +  _pictureSize.x        , _counterY  * _pictureSize.y  +  _pictureSize.y  ) ;
            _vertex[3].texCoords = sf::Vector2f( _counterX  *  _pictureSize.x                              , _counterY  * _pictureSize.y  +  _pictureSize.y  ) ;

 

Donc...Est-ce normal ? Il y a-t-il une methode pour éviter ca et changer la couleur avant de positionner ?
( mon but évidement, étant de pouvoir modifier les couleurs depuis une autre fonction ).

Merci si vous pouvez m'aider  ;)

11
Général / Conception d'un moteur2D
« le: Février 16, 2015, 11:43:14 pm »
Bonjour  ;)

Je suis en pleine crise existentiel ( en terme de programmation, je vous rassure :D ).

J'ai déjà réalisé quelques nivaux de mon jeu, qui fonctionnent très correctement. Mais, pour aller plus loin, j'ai décider de recommencer ! Car très vite, j'ai réalisé que créer de nouveaux objets etc..s'avérera long et fastidieux. Or, j'ai envie d'aller le plus loin possible et réaliser un jeu complet et riche. (vu que je fais aussi le graphisme/animation, j'ai besoin d'optimiser mon temps ) Pour faciliter la suite de ma production, je me dis que partir sur des meilleurs bases peut être un gain de temps plus tard.Bref...

J'ai donc pensé à l'héritage (chose que je ne voulais pas utiliser avant).

Pour faire simple :

Mon objectif est d'avoir un moteur, qui gère un/plusieurs vector d'Object. Point barre. ( entre guillemet )

Bien sur , "Objects" étant une class mère ayant d’innombrables enfants qui pourraient intéragir entre eux.

Voilà l'idée de base. (j'ai déjà pas mal avancé puisque le système est mis en place ).

Mais en en parlant sur developpez.com, on m'a finalement déconseillé l'héritage, pour ce que je voulais faire...
Qu'en pensez vous ??

Merci

(le topic de developpez : http://www.developpez.net/forums/d1499196-2/c-cpp/cpp/copie-d-objet-herite/#post8136571 )




12
Système / apréhender le deltaTime
« le: Février 14, 2015, 11:18:42 am »
Bonjour .

J'aimerais gérer la vue en utilisant un delta sf::Time qui calcule le temps de chaque frame en microseconds, afin d'avoir un mouvement de caméra le plus fluide possible...

Je prend donc le parti de créer une variable "_viewValue" , qui va calculer le ratio des déplacements en fonction, donc, du deltaTime, et également de la taille du zoom . ( le but étant de bouger plus ou moins vite en fonction du zoom qui est oppéré sur la scène : plus on est proche, plus c'est lent et inversement ).

Je me retrouve alors avec une interrogation ( de débutant ) : comment bien gérer cette équation pour que la vitesse soit la même quelque soit la machine qui fait tourner le programme? Car je me retrouve a "bricoler" des mathématiques de façon un peu hasardeuse...ce qui donne :


        _zoomRation = _viewMaximumZoom / _view.getSize().x ;
        _viewValue =  10 / _deltaTime * _zoomRation ;

 

puis enssuite, j'ai, bien sur :


        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
        {
            _view.move(-_viewValue,0);
        }
        etc...

 

( maximumZoom étant une constante de la taille.x de la fenêtre minimum que le zoom puisse atteindre, soit le plus proche )

 Ma question :

Selon vous, ce code vous parait-il fiable/correct ? et ce quelque soit la puissance de la machine qui fait tourner le programme ?

Merci si vous pouvez m'aider

ps: je me suis finalement mi a l'anglais...Je suis grand, maintenant  ;D

13
Graphique / effet de lumière et sf::RenderTexture
« le: Janvier 16, 2015, 11:35:05 am »
Bonjour .

J'ai implémenté un effet de lumière, basé sur sf::RenderTexture. SVP pouvez-vous me donner votre avis, si quelque chose ne va pas?
Ca marche, mais c'est assez gourmand, et donne un rendu qui n'est pas forcément souhaité (j'ai comme un légers assombrissement autour de ma lumière générée).
J'ai besoin de génerer un grand nombre de ces lumières, et quand j'arrive au bout d'une centaine, par exemple, ça commence a ralentir (et j'ai un ordi assez puissant ). J'aimerais donc savoir si ma façon de procéder pourrait être optimisé/doit être revue etc...

mon système est ainsi:

Les objets lumineux contiennent un petit objet "Lumiere", qui contiennent une position, une taille, une sf::Color.


class Lumiere
{
public:

    Lumiere();
    ~Lumiere();


    void                                        positionne(float x, float y);
    void                                        recoitTaille(int taille);
    void                                        changeTaille(int change);
    void                                        recoitCouleur(int rouge, int vert, int bleu, int alpha);

    sf::Vector2f                             renvoiPosition();
    sf::Color                                  renvoiCouleur();
    int                                            renvoiTaille();


private:

    float                                       m_x, m_y;
    sf::Color                                 m_couleur;
    int                                          m_taille;

};

 

Ils envoient aux objets de décor sur lequel ils se trouvent (a l'aide de collision ) l'adresse de leurs lumières.


class DecorModulaire
{
   ...
   private:

            vector<Lumiere*>                              m_LumiereVector;
    ...
}
 

void DecorModulaire::recoitLumiere()
{
...
        if(collisionne())
        {
              if(m_demarreLumiere)
             {
                     m_renderTexture = new sf::RenderTexture;
                     m_renderTexture->create( m_textureLumiere->getSize().x , m_textureLumiere->getSize().y );
                     m_demarreLumiere = false;
              }
              ...
              m_lumiereVector.push_back(m_objetQuiEnvoiLaLumiere->renvoiLumiere());
              ...//ici avec conditions pour que seul les lumières demandés soient envoyés au moment voulut
        }
...
}

 


Ceux ci vont alors utiliser sf::RenderTexture pour superposer le nombre de lumières qu'ils doivent mettre sur la texture de fond, à l'aide de la texture de lumière du même décor.


//utilisation des donnés de la lumière a imprimer, a un rytme comparable a celui de l'animation(16 frame/s )
    for(vector<Lumiere*>::iterator it = m_lumiereVector.begin() ; it != m_lumiereVector.end() ; it ++ )
    {

    m_x_lumiere = (*it)->renvoiPosition().x - m_x ;
    m_y_lumiere = (*it)->renvoiPosition().y - m_y ;
    m_tailleLumiere = (*it)->renvoiTaille();

//transformation de ces données en cercle avec dégradé

    sf::Vertex vertexCercle[36];
    vertexCercle[0] = sf::Vector2f( m_x_lumiere                                                                                                      , m_y_lumiere );
    vertexCercle[1] = sf::Vector2f( m_x_lumiere                                                                                                      , m_y_lumiere - m_tailleLumiere );
    vertexCercle[2] = sf::Vector2f( m_x_lumiere + m_tailleLumiere/2                                                                                  , m_y_lumiere - sqrt ( -( (m_tailleLumiere/2) * (m_tailleLumiere/2) ) + (m_tailleLumiere * m_tailleLumiere)  )
);

    vertexCercle[..] = ...
...

    vertexCercle[0].texCoords = sf::Vector2f( m_x_lumiere                                                                                                      , m_y_lumiere );
    vertexCercle[1].texCoords = sf::Vector2f( m_x_lumiere                                                                                                      , m_y_lumiere - m_tailleLumiere );
    vertexCercle[2].texCoords = sf::Vector2f( m_x_lumiere + m_tailleLumiere/2                                                                                  , m_y_lumiere - sqrt ( -( (m_tailleLumiere/2) * (m_tailleLumiere/2) ) + (m_tailleLumiere * m_tailleLumiere)  ) );

    vertexCercle[..].texCoords ...
...

    vertexCercle[0].color = sf::Color( (*it)->renvoiCouleur() );
    vertexCercle[1].color = sf::Color( 0 , 0 , 0 , 0 );
    vertexCercle[2].color = sf::Color( 0 , 0 , 0 , 0 );

    vertexCercle[..].color ...
...

//et ici la transformation de la texture


    EI eiTest; //EI pour EntiteImage
    eiTest.recoitTexture(m_textureLumiere);
        for(int compteur = 0; compteur < 36 ; compteur ++)
        {
            eiTest.recoitVertex(vertexCercle[compteur]);
        }
    m_renderTexture->draw(eiTest);
    }

    m_renderTexture->display();

        m_EI_lumiere.recoitTexture(m_renderTexture->getTexture());
    }

 

et enfin voici, dans mon EI, ce qui se passe quand je lui envoie des vertexs :

...

public:

    void recoitVertex(sf::Vertex vertex2)
    {
        m_vectorVertex.push_back(vertex2);
    }



private:

virtual void draw(sf::RenderTarget& cible, sf::RenderStates states) const
{
    if (m_actif && m_vectorVertex.empty())
    {
            states.texture = m_texture;
            cible.draw(m_tableauVertex,4,sf::Quads,states);
    }
    if(!m_vectorVertex.empty())
    {
        cible.draw(&m_vectorVertex[0], m_vectorVertex.size(), sf::Triangles, m_texture);
    }
}

...
    vector<sf::Vertex>  m_vectorVertex;


 




Comme je le disais, ca marche mais c'est assez lourd. Si je ne met que quelques dizaines de lumières, ca tourne sans problème, mais dès que j'en génère quelques centaines, en me baladant dans l'environnement, ca commence a ramer....

Donc, svp, si vous pouvez m'aider, j'aimerais savoir si :

a ce stade , c'est normal que ca rame, avec le sf::RenderTexture, pour ce qui est demandé...

si cette facon de programmer vous semble "propre"...
 
comment faire pour éviter cette zonne sombre autour de la lumière ? utiliser un blend pourrait résoudre le pb? ou cela vient des vertexs?

Merci si vous pouvez m'aider  :D

14
Graphique / convertir une sf::RenderTexure
« le: Janvier 14, 2015, 05:08:27 pm »
Bonjour.

J'essaye, sans succes, de convertir une sf::RenderTexture en pointeur de texture, afin de l'afficher comme les autres textures...


    renderTexture.clear(sf::Color::Red);
    for(vector<EI>::iterator it = vectorEI.begin() ; it != vectorEI.end() ; it ++)
    {
        renderTexture.draw(*it);
    }
    renderTexture.display();


    EI_test.recoitTexture(renderTexture.getTexture());

 

Ce qui donnerait ceci pour mon EI (tristement appelée EI, mais c'est trop tard pour changer mon EntiteImage de nom...Ce serait d'ailleurs accorder trop d'importance a ces malades  :'( ).



    void recoitTexture(const sf::Texture &texture)
    {
        *m_texture = texture;
    }

private:

virtual void draw(sf::RenderTarget& cible, sf::RenderStates states) const
{

            states.texture = m_texture;
            cible.draw(m_tableauVertex,4,sf::Quads,states);

}

    float m_z;
    sf::Vertex m_tableauVertex[4];
    sf::Texture *m_texture;


 

plantage. (j'ai aussi des problèmes avec mon debugg, ce qui n'aide pas )...

Ma facon de faire est-elle cohérente?

15
Général / shader et openGL
« le: Janvier 13, 2015, 05:55:18 pm »
Bonjour.

J'aimerais ajouter des shaders a mon programme, mais j'ai vu que cela risque d'être compliqué et implique un apprentissage de nouveaux langages (au moins le GLSL ).

Une question: faut-il nécessairement connaitre l'openGL pour pouvoir créer des shaders..?

faut-il inclure une lib d'openGL, même si la SFML est basé dessus (enfin il me semble ), et si oui, quelle version pour être compatible avec la SFML ?

Et éventuellement, connaissez-vous, a tout hasard, des bons tuto a ce propos ?

Merci si vous pouvez me conseiller  ;)

Pages: [1] 2 3 Suivante »
anything