46
Graphique / Re : [SFML 2.0 RC]problème d'affichage
« le: Août 25, 2012, 11:32:58 am »
Bonjour,
Je suis parti du code minimal, pour remonter jusqu'à ma version de base avec fichiers séparés :
la version qui marche
et la version qui marche pas
#ifndef CARTE_HPP
#define CARTE_HPP
#include <iostream>
#include <SFML/Graphics.hpp>
namespace Cartes
{
enum Valeur {As=0, Deux, Trois, Quatre, Cinq, Six, Sept, Huit, Neuf, Dix, Valet, Dame, Roi, Joker};
enum Couleur {Trefle=0, Pique, Coeur, Carreau, Sans};
const int taille_carte_x = 73;
const int taille_carte_y = 98;
static sf::Texture Cartes;
static void InitTextureCartes()
{
if (!Cartes::Cartes.loadFromFile("Cartes.png"))
std::cout << "erreur lors du chargement de la texture" << std::endl;
}
class Carte
{
public:
Carte(Valeur v, Couleur c);
~Carte();
inline Valeur Getv() { return v; }
inline void Setv(Valeur val) { v = val; }
inline Couleur Getc() { return c; }
inline void Setc(Couleur val) { c = val; }
sf::Sprite& Gets() { return s; }
protected:
private:
Valeur v;
Couleur c;
sf::Sprite s;
};
}
C'est pas comme ça qu'on gère les namespaces entre un header et son implé ?
Bon sinon est-ce que j'aurais un intérêt à faire du header-only là ? A part pour le fait que cela corrige le bug s'il n'y a que l'header je veux dire (d'ailleurs quand c'est pas pour des API c'est quoi l'intérêt du header-only ?).
Je suis parti du code minimal, pour remonter jusqu'à ma version de base avec fichiers séparés :
- A la seconde ou je colle le ctor et le dtor de la classe Carte dans un fichier séparé : Carré blanc
- Tout le reste est à l'identique avec la version buggée
- du coup je penses que je foire avec les namespaces
la version qui marche
#ifndef CARTE_HPP
#define CARTE_HPP
#include <iostream>
#include <SFML/Graphics.hpp>
namespace Cartes
{
enum Valeur {As=0, Deux, Trois, Quatre, Cinq, Six, Sept, Huit, Neuf, Dix, Valet, Dame, Roi, Joker};
enum Couleur {Trefle=0, Pique, Coeur, Carreau, Sans};
const int taille_carte_x = 73;
const int taille_carte_y = 98;
static sf::Texture Cartes;
static void InitTextureCartes()
{
if (!Cartes::Cartes.loadFromFile("Cartes.png"))
std::cout << "erreur lors du chargement de la texture" << std::endl;
}
class Carte
{
public:
Carte(Valeur v, Couleur c);
~Carte();
inline Valeur Getv() { return v; }
inline void Setv(Valeur val) { v = val; }
inline Couleur Getc() { return c; }
inline void Setc(Couleur val) { c = val; }
sf::Sprite& Gets() { return s; }
protected:
private:
Valeur v;
Couleur c;
sf::Sprite s;
};
Carte::Carte(Valeur v, Couleur c) :
v(v),
c(c)
{
s.setTexture(Cartes);
s.setTextureRect(sf::IntRect(v*taille_carte_x,c*taille_carte_y,taille_carte_x,taille_carte_y));
//ctor
}
Carte::~Carte()
{
//dtor
}
}
#define CARTE_HPP
#include <iostream>
#include <SFML/Graphics.hpp>
namespace Cartes
{
enum Valeur {As=0, Deux, Trois, Quatre, Cinq, Six, Sept, Huit, Neuf, Dix, Valet, Dame, Roi, Joker};
enum Couleur {Trefle=0, Pique, Coeur, Carreau, Sans};
const int taille_carte_x = 73;
const int taille_carte_y = 98;
static sf::Texture Cartes;
static void InitTextureCartes()
{
if (!Cartes::Cartes.loadFromFile("Cartes.png"))
std::cout << "erreur lors du chargement de la texture" << std::endl;
}
class Carte
{
public:
Carte(Valeur v, Couleur c);
~Carte();
inline Valeur Getv() { return v; }
inline void Setv(Valeur val) { v = val; }
inline Couleur Getc() { return c; }
inline void Setc(Couleur val) { c = val; }
sf::Sprite& Gets() { return s; }
protected:
private:
Valeur v;
Couleur c;
sf::Sprite s;
};
Carte::Carte(Valeur v, Couleur c) :
v(v),
c(c)
{
s.setTexture(Cartes);
s.setTextureRect(sf::IntRect(v*taille_carte_x,c*taille_carte_y,taille_carte_x,taille_carte_y));
//ctor
}
Carte::~Carte()
{
//dtor
}
}
et la version qui marche pas
#ifndef CARTE_HPP
#define CARTE_HPP
#include <iostream>
#include <SFML/Graphics.hpp>
namespace Cartes
{
enum Valeur {As=0, Deux, Trois, Quatre, Cinq, Six, Sept, Huit, Neuf, Dix, Valet, Dame, Roi, Joker};
enum Couleur {Trefle=0, Pique, Coeur, Carreau, Sans};
const int taille_carte_x = 73;
const int taille_carte_y = 98;
static sf::Texture Cartes;
static void InitTextureCartes()
{
if (!Cartes::Cartes.loadFromFile("Cartes.png"))
std::cout << "erreur lors du chargement de la texture" << std::endl;
}
class Carte
{
public:
Carte(Valeur v, Couleur c);
~Carte();
inline Valeur Getv() { return v; }
inline void Setv(Valeur val) { v = val; }
inline Couleur Getc() { return c; }
inline void Setc(Couleur val) { c = val; }
sf::Sprite& Gets() { return s; }
protected:
private:
Valeur v;
Couleur c;
sf::Sprite s;
};
}
#include "Carte.hpp"
namespace Cartes
{
Carte::Carte(Valeur v, Couleur c) :
v(v),
c(c),
s(sf::Sprite())
{
s.setTexture(Cartes);
s.setTextureRect(sf::IntRect(v*taille_carte_x,c*taille_carte_y,taille_carte_x,taille_carte_y));
//ctor
}
Carte::~Carte()
{
//dtor
}
}
namespace Cartes
{
Carte::Carte(Valeur v, Couleur c) :
v(v),
c(c),
s(sf::Sprite())
{
s.setTexture(Cartes);
s.setTextureRect(sf::IntRect(v*taille_carte_x,c*taille_carte_y,taille_carte_x,taille_carte_y));
//ctor
}
Carte::~Carte()
{
//dtor
}
}
C'est pas comme ça qu'on gère les namespaces entre un header et son implé ?
Bon sinon est-ce que j'aurais un intérêt à faire du header-only là ? A part pour le fait que cela corrige le bug s'il n'y a que l'header je veux dire (d'ailleurs quand c'est pas pour des API c'est quoi l'intérêt du header-only ?).