Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] Problème fonction getPixel / conversion Sprite en Image  (Lu 2412 fois)

0 Membres et 1 Invité sur ce sujet

Toko

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Bonjour,

Je suis récemment passé de la version 1.6 de SFML à la version 2.1
En mettant ma classe de Tile Mapping à jour un gros problème s'oppose à moi.
En effet, j'utilise la fonction "getPixel" qui était membre de la classe "Sprite" dans la version 1.6 et qui est membre de la classe "Image" maintenant. Jusque là il n'y a pas trop de problème, il m'a simplement suffi de mettre l'Image à la place du Sprite. Ce qui me donne le code suivant :

Couleur = m_carteImage.getPixel(i, m_LigneEnCours);


Or, j'utilisais auparavant la fonction "SetSubRect" sur mon Sprite, afin de pouvoir changer de map. Donc avec la version 1.6 je peux bel et bien utiliser un "setTextureRect" sur le Sprite, mais cela ne m'est pas très utilie étant donné que le calcul "getPixel" est effectué à partir de l'Image.

Je cherche donc une solution pour soit convertir mon Sprite en Image, soit utiliser "getPixel" sur un Sprite

Merci d'avance ! N'hésitez pas à me demander plus de renseignements si besoin :)
« Modifié: Avril 18, 2014, 12:47:48 pm par Toko »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème fonction getPixel / conversion Sprite en Image
« Réponse #1 le: Avril 17, 2014, 07:56:32 pm »
Ce n'est plus possible directement avec SFML 2, puisque les textures sont stockées sur la carte graphique, et leurs pixels ne sont donc plus accessibles directement. Ce qu'il faut faire, c'est stocker les pixels (ou un masque de booléens) lorsque tu charges la texture, et te servir de ce tableau lorsque tu veux faire des tests de pixels.
Laurent Gomila - SFML developer

Toko

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Problème fonction getPixel / conversion Sprite en Image
« Réponse #2 le: Avril 17, 2014, 09:14:06 pm »
Merci beaucoup pour votre réponse !

Malgré tout, cette solution ne me parait pas adapté à mon cas, car la carte est bien trop grosse.
Cependant, n'y-a-t-il donc aucun moyen pour "convertir" mon Sprite en Image ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème fonction getPixel / conversion Sprite en Image
« Réponse #3 le: Avril 17, 2014, 10:17:12 pm »
Tu veux faire quoi au juste ?
Laurent Gomila - SFML developer

Toko

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Problème fonction getPixel / conversion Sprite en Image
« Réponse #4 le: Avril 17, 2014, 10:57:17 pm »
Avec la version 1.6 de SFML, j'effectuais un SetSubRect sur un Sprite qui contenait ma "carte" (il s'agissait en fait seulement d'un png sur lequel j'avais dessiné des pixels). Puis en passant ce Sprite dans une méthode, il m'en ressortait un tableau de string (avec l'aide de getPixel évidemment). Avec ce tableau de string il m'était ensuite possible d'effectuer mon Tile Mapping.


Or, maintenant je dois utiliser une Image au lieu d'un Sprite, puisque c'est de cette classe-ci que "getPixel" est membre. Il m'est donc impossible d'utiliser un setTextureRect sur l'Image, et donc impossible d'effectuer un changement de map une fois dans le jeu.

Je me rends compte que mes explications ne sont pas très claires ! Je vais donc donner un bout de mon code actuel

Fonction permettant de créer le tableau de string
void TileMap::DefinirMapAvecCarte()
{
    m_tableau[0] = "";
    m_tableau[1] = "";m_tableau[2] = "";m_tableau[3] = "";m_tableau[4] = "";m_tableau[5] = "";m_tableau[6] = "";m_tableau[7] = "";m_tableau[8] = "";m_tableau[9] = "";m_tableau[10] = "";m_tableau[11] = "";m_tableau[12] = "";m_tableau[13] = "";m_tableau[14] = "";m_tableau[15] = "";m_tableau[16] = "";m_tableau[17] = "";m_tableau[18] = "";m_tableau[19] = "";m_tableau[20] = "";m_tableau[21] = "";m_tableau[22] = "";m_tableau[23] = "";m_tableau[24] = "";m_tableau[25] = "";m_tableau[26] = "";m_tableau[27] = "";m_tableau[28] = "";m_tableau[29] = "";m_tableau[30] = "";m_tableau[31] = "";

    Color Couleur;
    string LigneCompleteString;

    m_LigneEnCours = 0;

for ( m_LigneEnCours;m_LigneEnCours<m_nbreTileHauteur;m_LigneEnCours++)
{
    LigneCompleteString = "";
    int i=0;
    for(i;i<=m_nbreTileLargeur;i++)
    {
    Couleur = m_carteImage.getPixel(i, m_LigneEnCours);

        if(Couleur == Couleur.White)
        {
                 m_tableau[m_LigneEnCours].append("0");

        }

        else if(Couleur == Couleur.Black)
        {
              m_tableau[m_LigneEnCours].append("1");
        }


Fonction qui me permettait de changer de carte, quand je pouvais encore utiliser getPixel sur un Sprite :
void TileMap::ReDefinirCarte(int PosX, int PosY)
 {
    m_carte.setTextureRect(IntRect(PosX,PosY,m_nbreTileLargeur,m_nbreTileHauteur));
 }
 

Dans tous les cas, merci beaucoup pour votre aide !

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème fonction getPixel / conversion Sprite en Image
« Réponse #5 le: Avril 17, 2014, 11:37:34 pm »
Au lieu de faire ton getPixel sur tous les pixels de ton Image, tu peux le faire sur une partie de l'image.

Si avant tu avais une image et un subRect de 10 10 50 50, maintenant tu fais ton getPixel sur ton image en utilisant m_LigneEnCours de 10 à (10 + 50) et i de 10 à (10 + 50)

En gros tu fais un getPixel que sur les pixels qui t'intéressent. Ton image est si gigantesque que ça ?
« Modifié: Avril 17, 2014, 11:42:35 pm par G. »

Toko

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Problème fonction getPixel / conversion Sprite en Image
« Réponse #6 le: Avril 17, 2014, 11:45:38 pm »
Ha mais oui ! Merci beaucoup :D J'avais pensé à quelque chose dans le genre, mais sans trouver comment l'exécuter :) J'essaierai ceci demain matin