Bonjour.
Récemment, je me suis remis à SFML que j'avais découvert il y a quelques années mais peu à peu abandonné faute de véritable projet. Ayant l'habitude d'utiliser PhysFS et voyant avec ravissement que l'usage de cette bibliothèque était recommandé avec SFML, je me lance et... Rien du tout.
Je précise que je réussis parfaitement à décompresser un texte, par exemple, et à l'afficher. Mais dès qu'il s'agit d'une texture, d'une musique, ou de quoique ce soit que SFML devrait pouvoir lire, j'ai simplement un écran noir pour seule réponse ; aucune erreur. Je précise également que mes fichiers sont valides: en dehors de l'archive, SFML les lit sans aucun soucis.
Par la suite, je me suis décidé à faire une petite recherche Google et je suis tombé assez rapidement ma foi sur un exemple provenant de GitHub:
Petit lien. Cependant, bien évidemment, même après avoir créé un nouveau projet et copié collé ce code tel-quel, je n'y arrive pas mieux.
Est-ce que vous avez une quelconque idée de ce qui peut clocher. J'utilise les dernières versions de SFML et de PhysSF.
Merci pour votre attention.
Cordialement,
RG_EDIT: Pour une raison fort étrange, après avoir codé manuellement la classe, tout fonctionne parfaitement. Excusez le dérangement.
Je poste ci-dessous la classe en question si jamais elle pouvait servir à quelqu'un.
#include <physfs.h>
class FileStream : public sf::InputStream
{
public:
FileStream() : m_file(NULL){}
virtual ~FileStream()
{
PHYSFS_close(m_file);
}
bool open(const char* filename)
{
if(m_file)
{
PHYSFS_close(m_file);
}
m_file = PHYSFS_openRead(filename);
return m_file != NULL;
}
virtual sf::Int64 read(void* data, sf::Int64 size)
{
if(m_file)
{
return PHYSFS_read(m_file, data, 1, static_cast<PHYSFS_uint32>(size));
}
return -1;
}
virtual sf::Int64 seek(sf::Int64 position)
{
if(m_file)
{
PHYSFS_seek(m_file, position);
return tell();
}
return -1;
}
virtual sf::Int64 tell()
{
if (m_file)
{
return PHYSFS_tell(m_file);
}
return -1;
}
virtual sf::Int64 getSize()
{
if(m_file)
{
return PHYSFS_fileLength(m_file);
}
return -1;
}
private:
PHYSFS_File* m_file;
};
Usage simpliste:
PHYSFS_init(argv[0]);
PHYSFS_addToSearchPath("images.zip",1);
sf::Texture my_texture;
FileStream my_stream;
if(!my_stream.open("images/img.png"))
{
// Erreur
}
if(!my_texture.loadFromStream(my_stream))
{
// Erreur
}
sf::Sprite my_sprite;
my_sprite.setTexture(my_texture);
// Un peu plus bas... à la fin du programme
PHYSFS_deinit();