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

Auteur Sujet: probleme de position sf::Sprite  (Lu 2764 fois)

0 Membres et 1 Invité sur ce sujet

tony_kero

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
probleme de position sf::Sprite
« le: Juillet 26, 2013, 11:59:55 pm »
Bonjour, voila je suis en train de développer un jeu Pacman et mon probleme est que je voudrais créer une map de tuiles sauf que que je ne peux pas changer la position de mon Sprite (block)

voici le code ou ca ne "veut pas"
ma classe map derive de sf::Drawable

dans le map.cpp la methode draw :

void Map::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
    for(unsigned int k = 0; k < (width*height); k++)
        for(unsigned int i = 0; i < height; i += 32)
        {
            for(unsigned int j = 0; j < width; j += 32)
            {
                if(IDBlock[k] == '0')
                {
                    block.setPosition(sf::Vector2f(j, i));
                    target.draw(block);
                }
                if(IDBlock[k] == '1')
                {
                    wall.setPosition(sf::Vector2f(j, i));
                    target.draw(wall);
                }
            }
        }
}

 

et voici les erreurs:


In member function 'virtual void Map::draw(sf::RenderTarget&, sf::RenderStates) const':|

error: passing 'const sf::Sprite' as 'this' argument of 'void sf::Transformable::setPosition(const Vector2f&)' discards qualifiers [-fpermissive]|

error: passing 'const sf::Sprite' as 'this' argument of 'void sf::Transformable::setPosition(const Vector2f&)' discards qualifiers [-fpermissive]|

Merci d'avance

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : probleme de position sf::Sprite
« Réponse #1 le: Juillet 27, 2013, 02:28:42 am »
La méthode draw est const, c'està dire impossible de modifier l'objet qui l'appelle. (le this quoi)
Donc impossible à l'intérieur de cette méthode de modifier block (avec setPosition) qui est, j'imagine, un membre de Map.

Perso j'ai jamais kiffé utiliser un seul sprite et le déplacer pour l'afficher à droite à gauche. Tu peux utiliser un sprite pour chaque tuile, ça coute pas grand chose un sprite. (tant qu'ils utilisent tous la même instance de Texture)

A part ça, ta façon d'afficher les tuiles me semble hyper fausse.

tony_kero

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : probleme de position sf::Sprite
« Réponse #2 le: Juillet 27, 2013, 11:35:02 am »
ah oui le const ... merci beaucoup pour ton aide et non je ne pense pas que ma facon de gerer les tuiles soit fausses (enfin j'espere ;D)
le premier for oui j'ai oublié les accolades mais sinon:

tant que toutes les tuiles n'ont pas été mises
 que la hauteur n'st pas finie
   que la largeur n'est pas fini
    on change la position avec l'incrementation de 32 des boucles
   
il me semble que c'est bon ; (je te serais trés reconnaissant de me corriger)

merci beaucoup pour le const et je vais revoir l'agencement de ma méthode draw

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : probleme de position sf::Sprite
« Réponse #3 le: Juillet 27, 2013, 04:11:02 pm »
A chaque k tu dessines height * width fois la même tuile dans plusieurs positions, déjà c'est bizarre. Mais à chaque k + 1 tu redessines ta nouvelle tuile par dessus les autres. Du coup la boucle k elle sert à rien.
Y'a  que le dernier k qui sera visible, tous les k précédents seront en dessous.

Ensuite, je sais pas si height et width c'est des pixels ou les dimensions de tes tableaux, mais si c'est des pixels, alors tu vas sûrement dépasser les bornes de IDblock avec k. Si c'est des dimensions de tableau, c'est bizarre d'en sauter 32 à chaque tour de boucle i et j.

PS : quand tu stock un tableau à 2 dimensions (i et j) dans un tableau à 1 dimension (k) comme c'est le cas d'IDBlock, tu peux calculer l'index k correspondant à un i et j donnés en faisant k = i * width + j
(ou genre, suivant c'est quoi i et j, et la façon de remplir ton tableau)