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

Pages: [1]
1
D'accord, merci pour tous ces conseils ^^
Amicalement
Jérôme

2
Excuse-moi, je vais essayer de résumer la situation.
J'ai 4 fonctions dans mon objet Entity :
avancer_Droite()
avancer_Gauche();
avancer_Haut();
avancer_Bas();

Chacune permet de faire avancer mon personnage (mon sprite),
voici leurs contenu :
m_texture = m_personnage_droite_0;
        m_sprite.setTexture(m_texture);
        m_posX += 32;
        m_position = sf::Vector2f(m_posX, m_posY);
        m_sprite.setPosition(m_position);

J'aimerais afficher 4 fois m_sprite, pour 4 images quand il avance, comment je peux faire dans une seule fonction.

Amicalement
Jérôme

3
Mais moi dans ce cas, si je veux le dessiner pendant qu'il marche pas exemple, je fait comment (je veux le dessiner 4 fois) ?

Amicalement
Jérôme

4
;) Merci beaucoup
Je crois que j'ai compris, je test ...............................................
.........................................
........................................
....................................
..............................
->Mais ma fonction là est private, je ne vais pas l’appeler dans une autre fonction car pour cela j'aurais besoin de connaître ma RenderTarget qui se trouve dans mon main.
Donc je l'appelle d'où cette fonction ?

Amicalement
Jérôme

5
Par contre ce que je ne comprends pas c'est cela,
la fonction que j'utilise sont RenderTarget et RenderStates http://www.sfml-dev.org/documentation/2.1-fr/classsf_1_1RenderTarget.php#details, si je comprends bien il permet de dessiner un sprite ... mais comment et surtout qu'est-ce que je dois mettre dans la déclaration et où (dans le main, dans entity.h ...)?

Amicalement
Jérôme

6
Merci beaucoup ^^,
En effet c'était car il fallait enlever le states.transform *=.
Par contre ce que je ne comprends pas c'est cela,
la fonction que j'utilise sont RenderTarget et RenderStates http://www.sfml-dev.org/documentation/2.1-fr/classsf_1_1RenderTarget.php#details, si je comprends bien il permet de dessiner un sprite ... mais comment et surtout qu'est-ce que je dois mettre dans la déclaration ?
J'ai changé le tableau de vertexs par un sprite :
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
            // on applique la transformation de l'entité -- on la combine avec celle qui a été passée par l'appelant
            states.transform *= getTransform(); // getTransform() est définie par sf::Transformable
            // on applique la texture
            states.texture = &m_texture;

            // on peut aussi surcharger states.shader ou states.blendMode si nécessaire

            // on dessine le tableau de vertex
            target.draw(m_sprite, states);
        }
 

Amicalement
Jérôme

7
J'ai déjà mieux compris :
Là, c'est un tableau de vertex. Moi ce sont des sprites que j'utilise et non des vertexs. Comment faire ?
Merci d'avance
Amicalement
Jérôme

8
Merci pour cette réponse,
En faîtes ce que je ne comprends pas c'est que dans http://www.sfml-dev.org/tutorials/2.1/graphics-vertex-array-fr.php il doit le faire dans le main.
Moi je le fait dans Entity.h :
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
            // on applique la transformation de l'entité -- on la combine avec celle qui a été passée par l'appelant
            states.transform *= getTransform(); // getTransform() est définie par sf::Transformable
            states.transform *=
            // on applique la texture
            states.texture = &m_texture;

            // on peut aussi surcharger states.shader ou states.blendMode si nécessaire

            // on dessine le tableau de vertex
            target.draw(m_vertices, states);
        }
Je le met dans les 2 ?
Voici mon code du header:
#ifndef DEF_ENTITY
#define DEF_ENTITY

#include <iostream>
#include <string>
#include <SFML/Graphics.hpp>


class Entity : public sf::Drawable, public sf::Transformable
{
    public:
        Entity();
        ~Entity();

        static int nbrEntity();





        void avancer_Droite();
        void avancer_Gauche();
        void avancer_Haut();
        void avancer_Bas();
        void tourner_Droite();
        void tourner_Gauche();
        void tourner_Haut();
        void tourner_Bas();



        sf::Sprite getSprite();
        int getPosX();
        int getPosY();






    protected:
        static int compteur;
        int m_posX;
        int m_posY;

        sf::Sprite m_sprite;


        sf::Vector2f m_position;
        sf::Texture m_texture;
        sf::Texture m_personnage_haut_0;
        sf::Texture m_personnage_bas_0;
        sf::Texture m_personnage_gauche_0;
        sf::Texture m_personnage_droite_0;

        sf::Texture m_personnage_haut_1;
        sf::Texture m_personnage_bas_1;
        sf::Texture m_personnage_gauche_1;
        sf::Texture m_personnage_droite_1;

        sf::Texture m_personnage_haut_2;
        sf::Texture m_personnage_bas_2;
        sf::Texture m_personnage_gauche_2;
        sf::Texture m_personnage_droite_2;

        sf::Texture m_personnage_haut_3;
        sf::Texture m_personnage_bas_3;
        sf::Texture m_personnage_gauche_3;
        sf::Texture m_personnage_droite_3;

        sf::Image m_personnage_image;
       
        sf::VertexArray m_vertices;

    private:
        virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
        {
            // on applique la transformation de l'entité -- on la combine avec celle qui a été passée par l'appelant
            states.transform *= getTransform(); // getTransform() est définie par sf::Transformable
            states.transform *=
            // on applique la texture
            states.texture = &m_texture;

            // on peut aussi surcharger states.shader ou states.blendMode si nécessaire

            // on dessine le tableau de vertex
            target.draw(m_vertices, states);
        }
       

};

Voici mon Entity.cpp :
#include "Entity.h"
#include <SFML/Graphics.hpp>

using namespace sf;
using namespace std;

int Entity::compteur = 0;

Entity::Entity()
{
    m_posX = 0;
    m_posY = 0;
    m_position = sf::Vector2f(m_posX, m_posY);
    m_sprite.setPosition(m_position);

    m_personnage_image.loadFromFile("ressources/images/Personnages/rudelune/rudelune.png");

    m_personnage_bas_0.loadFromImage(m_personnage_image, sf::IntRect(0, 0, 32, 48));
    m_personnage_haut_0.loadFromImage(m_personnage_image, sf::IntRect(0, 144, 32, 48));
    m_personnage_droite_0.loadFromImage(m_personnage_image, sf::IntRect(0, 96, 32, 48));
    m_personnage_gauche_0.loadFromImage(m_personnage_image, sf::IntRect(0, 48, 32, 48));

    m_personnage_bas_1.loadFromImage(m_personnage_image, sf::IntRect(32, 0, 32, 48));
    m_personnage_haut_1.loadFromImage(m_personnage_image, sf::IntRect(32, 144, 32, 48));
    m_personnage_droite_1.loadFromImage(m_personnage_image, sf::IntRect(32, 96, 32, 48));
    m_personnage_gauche_1.loadFromImage(m_personnage_image, sf::IntRect(32, 48, 32, 48));

    m_personnage_bas_2.loadFromImage(m_personnage_image, sf::IntRect(64, 0, 32, 48));
    m_personnage_haut_2.loadFromImage(m_personnage_image, sf::IntRect(64, 144, 32, 48));
    m_personnage_droite_2.loadFromImage(m_personnage_image, sf::IntRect(64, 96, 32, 48));
    m_personnage_gauche_2.loadFromImage(m_personnage_image, sf::IntRect(64, 48, 32, 48));

    m_personnage_bas_3.loadFromImage(m_personnage_image, sf::IntRect(96, 0, 32, 48));
    m_personnage_haut_3.loadFromImage(m_personnage_image, sf::IntRect(96, 144, 32, 48));
    m_personnage_droite_3.loadFromImage(m_personnage_image, sf::IntRect(96, 96, 32, 48));
    m_personnage_gauche_3.loadFromImage(m_personnage_image, sf::IntRect(96, 48, 32, 48));

    m_texture.loadFromImage(m_personnage_image, sf::IntRect(0, 0, 32, 48));
    m_sprite.setTexture(m_texture);

    ++compteur;
}

Entity::~Entity()
    {
        --compteur;
    }

int Entity::nbrEntity()
    {
        return compteur;
    }








void Entity::avancer_Droite()
    {
        m_texture = m_personnage_droite_0;
        m_sprite.setTexture(m_texture);
        m_posX += 32;
        m_position = sf::Vector2f(m_posX, m_posY);
        m_sprite.setPosition(m_position);

    }

void Entity::avancer_Gauche()
    {
        m_texture = m_personnage_gauche_0;
        m_sprite.setTexture(m_texture);
        m_posX -= 32;
        m_position = sf::Vector2f(m_posX, m_posY);
        m_sprite.setPosition(m_position);
    }

void Entity::avancer_Haut()
    {
        m_texture = m_personnage_haut_0;
        m_sprite.setTexture(m_texture);
        m_posY -= 48;
        m_position = sf::Vector2f(m_posX, m_posY);
        m_sprite.setPosition(m_position);
    }

void Entity::avancer_Bas()
    {
        m_texture = m_personnage_bas_0;
        m_sprite.setTexture(m_texture);
        m_posY += 48;
        m_position = sf::Vector2f(m_posX, m_posY);
        m_sprite.setPosition(m_position);
    }











void Entity::tourner_Droite()
    {
        m_texture = m_personnage_droite_0;
        m_sprite.setTexture(m_texture);
    }

void Entity::tourner_Gauche()
    {
        m_texture = m_personnage_gauche_0;
        m_sprite.setTexture(m_texture);
    }

void Entity::tourner_Haut()
    {
        m_texture = m_personnage_haut_0;
        m_sprite.setTexture(m_texture);
    }

void Entity::tourner_Bas()
    {
        m_texture = m_personnage_bas_0;
        m_sprite.setTexture(m_texture);
    }






sf::Sprite Entity::getSprite()
    {
        return m_sprite;
    }

int Entity::getPosX()
    {
        return m_posX;
    }

int Entity::getPosY()
    {
        return m_posY;
    }



 

Et voici mes erreurs :
C:\Projets\C++\test_sfml\Entity.h|88|error: redeclaration of 'sf::Texture Entity::m_texture'|
C:\Projets\C++\test_sfml\Entity.h|50|note: previous declaration 'sf::Texture Entity::m_texture'|
C:\Projets\C++\test_sfml\Entity.h||In member function 'virtual void Entity::draw(sf::RenderTarget&, sf::RenderStates) const':|
C:\Projets\C++\test_sfml\Entity.h|80|error: no match for 'operator*=' in 'states.sf::RenderStates::transform *= (states.sf::RenderStates::texture = (&((const Entity*)this)->Entity::m_texture))'|
C:\Projets\C++\test_sfml\Entity.h|80|note: candidates are:|
C:\SFML-2.1\include\SFML\Graphics\Transform.hpp|390|note: sf::Transform& sf::operator*=(sf::Transform&, const sf::Transform&)|
C:\SFML-2.1\include\SFML\Graphics\Transform.hpp|390|note:   no known conversion for argument 2 from 'const sf::Texture*' to 'const sf::Transform&'|
C:\SFML-2.1\include\SFML\Graphics\Color.hpp|178|note: sf::Color& sf::operator*=(sf::Color&, const sf::Color&)|
C:\SFML-2.1\include\SFML\Graphics\Color.hpp|178|note:   no known conversion for argument 1 from 'sf::Transform' to 'sf::Color&'|
C:\SFML-2.1\include\SFML\System\Vector3.inl|125|note: template<class T> sf::Vector3<T>& sf::operator*=(sf::Vector3<T>&, T)|
C:\SFML-2.1\include\SFML\System\Vector3.inl|125|note:   template argument deduction/substitution failed:|
C:\Projets\C++\test_sfml\Entity.h|80|note:   'sf::Transform' is not derived from 'sf::Vector3<T>'|
C:\SFML-2.1\include\SFML\System\Vector2.inl|120|note: template<class T> sf::Vector2<T>& sf::operator*=(sf::Vector2<T>&, T)|
C:\SFML-2.1\include\SFML\System\Vector2.inl|120|note:   template argument deduction/substitution failed:|
C:\Projets\C++\test_sfml\Entity.h|80|note:   'sf::Transform' is not derived from 'sf::Vector2<T>'|
C:\SFML-2.1\include\SFML\System\Time.hpp|352|note: sf::Time& sf::operator*=(sf::Time&, sf::Int64)|
C:\SFML-2.1\include\SFML\System\Time.hpp|352|note:   no known conversion for argument 1 from 'sf::Transform' to 'sf::Time&'|
C:\SFML-2.1\include\SFML\System\Time.hpp|340|note: sf::Time& sf::operator*=(sf::Time&, float)|
C:\SFML-2.1\include\SFML\System\Time.hpp|340|note:   no known conversion for argument 1 from 'sf::Transform' to 'sf::Time&'|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 5 seconds) ===|
 
Merci d'avance
Amicalement
Jérôme

9
Bonjour à tous  ;),
J'ai en ce moment un objet appelé Entity, j'aimerais afficher un sprite contenu dans l'objet sur une fenêtre contenu dans le main.
Je ne sais pas comment faire.
Quand je fait hériter Entity.h de "public sf::Drawable", je ne peux plus déclarer mon objet. Comment faire ? Voici mon erreur :
C:\Projets\C++\test_sfml\Entity.h|77|error: cannot declare variable 'test' to be of abstract type 'Entity'|

J'avoue que je ne comprends pas trop, même en regardant la documentation : http://www.sfml-dev.org/documentation/2.1-fr/classsf_1_1Drawable.php ...

Amicalement
J'attend avec impatience votre réponse.
Merci pour SFML
Jérôme

10
Graphique / Re : Rectangle à l'intérieur d'un objet
« le: Août 30, 2013, 05:19:04 pm »
En faite je pense que je connais à peu près la syntaxe du C++ en ayant suivit le tutoriel du site du zéro entièrement, cependant, cela fait 2 mois que je n'ai plus fait de C++, il faut que je me réhabitue et je viens de commencer le SFML.
Pour les personnes qui cherchent pourquoi l'image ne s'affichait pas c'est car il fallait mettre des "/" et non pas des "\" ?!
Merci à vous deux d'avoir répondu à mes questions.Amicalement
Jérôme (alias RuDeLune)

11
Graphique / Re : Rectangle à l'intérieur d'un objet
« le: Août 30, 2013, 03:55:11 pm »
Salut,
Merci tout d'abord de m'avoir répondu aussi rapidement ;)
J'ai encore deux problèmes :
j'ai donc crée une texture dans mon Personnage.h :
sf::Texture texture;
    texture.loadFromFile("C:\Projets\C++\test_sfml\ressources\images\Personnages\rudelune\rudelune_0.png");
Cela m'affiche l'erreur :
Citer
error: 'texture' does not name a type
Comment faire ?
Ma seconde question est : quand je fait :
 texture.loadFromFile("ressources\images\Personnages\rudelune\rudelune_0.png");
où va-t-il chercher l'images ?

Merci d'avance
Amicalement
Jérôme (alias RuDeLune)

12
Graphique / [Résolu] Rectangle à l'intérieur d'un objet
« le: Août 29, 2013, 11:51:52 pm »
Bonjour à tous,
Je possède SFML 2.1 et je souhaite faire un mini-RPG ayant pour seul but de m'apprendre à maitriser la POO.
Cependant un problème ce pose, j'aimerai déclarer un rectangle à l'intérieur de mon objet et même si possible l'afficher directement dans l'objet. Cela est-il possible ? et dans ce cas comment.
Merci d'avance pour vos réponse que j'espère nombreuse.
Bonne fin de vacances
Amicalement
RuDeLune

PS : Voici mon code pour l'instant :
#include "Aventurier.h"

#include <SFML/Graphics.hpp>

Aventurier::Aventurier()
{

}

Aventurier::~Aventurier()
{

}

void Aventurier::attaque_CoupDePoing(Personnage &cible) const
{
    cible.recevoirDegats(10);
}

sf::RectangleShape rectangle(sf::Vector2f(120, 50));
 

Pages: [1]
anything