IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SFML Discussion :

[SFML/c++14] Bug de positionnement ?


Sujet :

SFML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut [SFML/c++14] Bug de positionnement ?
    Bonjour à tous ! je code actuellement un petit jeu type rpg. Je l'ai fini mais j'ai voulu ajouter une barre de vie qui apparaît sous les monstres. Sauf que ma barre n'est pas bien centré et je ne vois pas pourquoi ^^" voici un code minimaliste pour faire fonctionner la barre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    #include <iostream>
    #include <vector>
    #include <SFML/Graphics.hpp>
    #include <windows.h>
     
    using std::string;
    using std::cout;
    using std::endl;
    using std::vector;
     
    sf::Vector2f operator-( sf::Vector2f v_f, float const &i ){ v_f.x -= i;v_f.y -= i;return v_f;}
    sf::Vector2f operator/( sf::Vector2f v_f, float const &i ){ v_f.x /= i;v_f.y /= i;return v_f;}
    sf::Vector2f operator+( sf::Vector2f v_f, float const &i ){ v_f.x += i;v_f.y += i;return v_f;}
     
    class LifeBar : public sf::Drawable, public sf::Transformable
    {
    public:
        LifeBar( sf::Vector2f position, sf::Vector2f size, float life ) : _max_status_size{ size.y - 2.0f }, _max_life{life}, _life{life}
        {
            _rect.setSize(size);
            _rect.setFillColor( sf::Color( 0, 0, 0, 0 ) );
            _rect.setOutlineThickness(1);
            _rect.setOutlineColor(sf::Color::Black);
            _rect.setPosition(position);
     
            _status.setSize( size - 2.0f );
            _status.setFillColor( sf::Color( 0, 255, 0, 200 ) );
            _status.setPosition( position + 1 );
        }
     
        void lifeDamage( float const damage )
        {
            if( damage < _life )
                _life -= damage;
            else
                _life = 0;
            if( _life > _max_life )
                _life = _max_life;
            _status.setSize( sf::Vector2f( _status.getSize().x, _life * _max_status_size / _max_life ) );
            _status.setFillColor( sf::Color( (_life * 255 / _max_life ) * -1, _life * 255 / _max_life, 0, 200 ) );
        }
     
        sf::Vector2f getSize() const
        {
            return _rect.getSize();
        }
     
    private:
     
        float const _max_status_size;
        sf::RectangleShape _rect;
        sf::RectangleShape _status;
        float const _max_life;
        float _life;
        virtual void draw( sf::RenderTarget& target, sf::RenderStates states ) const
        {
            states.transform *= getTransform();
            target.draw( _rect, states );
            target.draw( _status, states );
        }
    };
     
    int main(void)
    {
        bool inApp{true};
        unsigned int countOfClick{0};
        sf::RenderWindow window;
        sf::ContextSettings conSettings;
        conSettings.antialiasingLevel = 4;
        window.create( sf::VideoMode( 800, 600 ), "Test", sf::Style::Default, conSettings );
     
        LifeBar lb( sf::Vector2f(50,50), sf::Vector2f(50,500), 100 );
        lb.setOrigin( lb.getSize() / 2);
        lb.rotate(270);
        lb.setPosition(sf::Vector2f( static_cast<float>( window.getSize().x / 2 ), static_cast<float>( window.getSize().y / 2 ) ) );
        sf::Clock clk;
        while( inApp )
        {
            while( window.isOpen() )
            {
                sf::Event event;
                while( window.pollEvent( event ) )
                {
                    if( event.type == event.Closed )
                        window.close();
                    if( event.type == event.MouseButtonPressed )
                    {
                        if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) )
                        {
                            system("cls");
                            cout << "Nombre de cliques : " << countOfClick++;
                        }
                    }
                }
                window.clear(sf::Color::White);
                window.draw(lb);
                window.display();
                while( clk.getElapsedTime().asMicroseconds() < 1000 )
                {
     
                }
                clk.restart();
                lb.lifeDamage(0.01);
            }
        }
    }
    Merci de bien vouloir m'aider

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Salut,

    Que signifie "pas bien centrée" ? Un petit screenshot peut-être ?
    Vu que tu joues avec les origines, mais pas de partout, ça devient vite brouillon à te suivre. Et hériter de sf:rawable et Transform, héritage déjà présent avec Sprite, c'est pas vraiment une bonne chose là. Ta lifebar est une composition de ce qu'elle dessine, elle n'a pas à être Drawable ou Transformable. Même si je comprends la syntaxe, parce que tu vas plus vite ainsi, le concept n'est pas bon.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Salut,

    Que signifie "pas bien centrée" ? Un petit screenshot peut-être ?
    Vu que tu joues avec les origines, mais pas de partout, ça devient vite brouillon à te suivre.
    Boh arréte ya juste 1 seul ligne pour l'origin x) et c'est celci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lb.setOrigin( lb.getSize() / 2);
    Et pour le screenshot ça donne ceci :
    Nom : erreur.png
Affichages : 302
Taille : 154,7 Ko
    Franchement j'ai beau tourner le code dans tout les sens, je vois pas :/ ?

    Ps: Pour la conception là c'est un brouillon hein, si je suis déjà bloquer pour un centrage c'est mal barré X)

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    As-tu tenu compte des origines et taille, de la bar comme du sprite représentant l'ennemi?

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    Citation Envoyé par leternel Voir le message
    As-tu tenu compte des origines et taille, de la bar comme du sprite représentant l'ennemi?
    J'avoue ne pas avoir vraiment compris ta question, mais pour l'instant faisons simple je veux juste que ma barre de vie soit centré dans ma fenêtre. Je n'ai pas de problèmes pour le reste c'est juste cette barre qui me pose problème car il y un décalage vers la droite ce qui est... absurde ? Je pense que rotate est peut être le problème mais normalement il prend en compte l’origine donc c'est pour ça que je suis bloquer ^^"

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Il est possible de ne pas hériter de Transformable, et de faire manuellement l'équivalent.
    L'intérêt, c'est que l'origine des transformation dans Transformable est commune, donc une rotation par rapport à son centre signifie que l'origine n'est pas dans l'angle, mais au centre.

    Comment est fait ton affichage précisément? Quelles sont les transformations appliquées à ta barre? et où est son origine?

Discussions similaires

  1. Vidéo flash bug firefox 3.0 (positionnement)
    Par doncho23 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/02/2012, 08h32
  2. Bug de positionnement ie6
    Par leejunfan dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 28/04/2008, 16h44
  3. Bug positionnement dans menu "accordéon" multiniveau
    Par BnA dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 07/04/2008, 15h48
  4. [SFML] Ma fonction d'affichage bug
    Par bachir006 dans le forum SFML
    Réponses: 10
    Dernier message: 26/03/2008, 22h19
  5. Bug Firefox positionnement "dans le flux normal"
    Par thierryyyyyyy dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 29/04/2007, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo