Tout d'abord merci pour le soutien que vous apportez !
Il n'y a pas d'erreur de code. Tout fonctionne bien, simplement l'affichage par VertexArray/Quad n'opère pas, alors qu'il fonctionne avec Sprite.
Je vous présente ici l'architecture globale de mon jeu pour expliciter mon problème.SVP si vous avez des remarques ou des conseils, faites m'en part !
J'ai également essayé avec une entité, comme expliqué ici:
http://sfml-dev.org/tutorials/2.1/graphics-vertex-array-fr.phpmais, sauf erreur de ma part, avec ma technique d'affichage, ca ne fonctionne toujours pas.
voici mon code:
Tout d'abord, l'objet " Niveau1" est lancé par un autre objet (servant à déterminer quel niveau jouer), qui lui transmet &m_afficheur, et &m_ptrAffichageFinale (qui serviront a afficher):
int Niveau1::jouerNiveau()
{
...
m_afficheur->chargerNiveaux(1,m_ptrAffichageFinale);
m_afficheur->charger(elementFeu);
...
while (!controles.quitter()&&m_niveauOuvert == 1)
{
...
m_afficheur->envoiPosition(elementFeu); //raffraichi les positions a chaque frame
m_afficheur->recoiVue(m_reperX,m_reperY,1600,900); //idem
m_afficheur->afficherNiveau();
...
}
Un objet Afficheur (m_afficheur) recoit les informations, pour les transmettre a l'objet AffichageNiveau...
...
void Afficheur::chargerNiveaux(int fond, AffichageFinale *ptrAffichageFinale)
{
affichageNiveaux.chargerNiveaux(fond,ptrAffichageFinale );
}
...
//////////////////////Meme chose pour toutes les fonctions appelés////////////////////////////
...l'objet AffichageNiveaux, contient en private toutes les textures/animations de tous les niveaux. Il charge celles qui sont appelés et les envoi a l'affichage finale:
void AffichageNiveaux::chargerNiveaux(int fond, AffichageFinale *ptrAffichageFinale)
{
...
m_ptraffichageFinale = ptrAffichageFinale;
...
m_niveauxFond[1].loadFromFile("images/niveaux/niveau1/fondNiveau1.png");
m_spriteNiveauxFond[1].setTexture(niveauxFond[1]);
...
sf::VertexArray m_quad(sf::Quads, 4);
/////////////////////pour le test///////////////////////////////
m_quad[0].position = sf::Vector2f(10, 10);
m_quad[1].position = sf::Vector2f(100, 10);
m_quad[2].position = sf::Vector2f(100, 100);
m_quad[3].position = sf::Vector2f(10, 100);
/////////////////////pour le test///////////////////////////////
m_elementFeu .loadFromFile("images/element/feu/Feupassif.png");
...
}
...
void AffichageNiveaux::afficher(){
{
...
m_ptraffichageFinale->recoiImage(m_quad,&m_elementFeu );//////////////ici on envoi l'image///
m_ptraffichageFinale->recoiVue(&m_vue);
...
m_ptraffichageFinale->afficher();
}
Enfin, Affichage finale récupère ces donnés et les affiche.
class AffichageFinale
{
public:
AffichageFinale();
~AffichageFinale();
...
void recoiImage(sf::VertexArray quad, sf::Texture *texture);
void afficher();
private:
sf::RenderWindow fenetreFinale;
sf::View m_vue;
...
sf::Texture *m_texture;
sf::VertexArray m_quad; ////////////////////////////////ici le pb/////////////////////////////////////
};
#include "AffichageFinale"
void AffichageFinale::recoiImage(sf::VertexArray quad,sf::Texture * texture)
{
m_texture = texture;
m_quad = quad; ////////////////////////////////ici le pb/////////////////////////////////////
}
...
void AffichageFinale::afficher()
{
if (fenetreFinale.isOpen())
{
sf::Event event;
fenetreFinale.pollEvent(event);if (event.type == sf::Event::Closed){fenetreFinale.close();}
fenetreFinale.clear(sf::Color::Black);
...
fenetreFinale.setView(m_vue);
...
fenetreFinale.draw(m_quad, m_texture); /////rien ne s'affiche/////////////////////////////////////////////
...
fenetreFinale.display();
}}