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