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

Auteur Sujet: [Résolu]Le draw() n'affiche rien  (Lu 2469 fois)

0 Membres et 1 Invité sur ce sujet

Ultimette

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
[Résolu]Le draw() n'affiche rien
« le: Juin 11, 2014, 01:31:40 pm »
Bonjour à tous !



J'ai commencé un petit projet et je suis confronté à un problème au niveau des draw().

Depuis que je passe par la classe gambeOject, les objets ne se dessinent plus, je ne comprends pas pourquoi puisque lorsque je stockais les sprites dans la classe Salle, cela marchait !


Dans la boucle principal du main
salle_test.draw(window);
 

Dans Salle.cpp
void Salle::draw(sf::RenderWindow &window)
{
    GameObjectPhysics rocher("../Survive/Ressources/rocher_4.png",30,30);
    GameObjectPhysics herbe("../Survive/Ressources/herbe_1.png",30,30);

    for(int x = 0; x<16; x++)
        for(int y = 0; y<20; y++)
        {
            if(tab[x][y] == 0)
            {
                rocher.setPosition(y*30, x*30);
                rocher.draw(window);
            }
            else
            {
                herbe.setPosition(y*30, x*30);
                herbe.draw(window);
            }
        }
}
 

Dans gameObject (parent de gameObjectPhysics
void GameObject::setPosition(int y, int x)
{
    _sprite.setPosition(y,x);
}


void GameObject::draw(sf::RenderWindow &window)
{
    window.draw(_sprite);
}

 



J'ai joint les fichiers de mon projet au message si besoin





PS : n'hésitez pas à me donner des conseils sur la structure ou sur des détails qui peuvent avoir une importance (Il y a des choses que j'ai implémenté de manière enfantine car j'essaie d'avancer progressivement ! )



Merci d'avance !
« Modifié: Juin 11, 2014, 08:11:27 pm par Ultimette »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le draw() n'affiche rien
« Réponse #1 le: Juin 11, 2014, 02:33:36 pm »
Citer
    GameObjectPhysics rocher("../Survive/Ressources/rocher_4.png",30,30);
    GameObjectPhysics herbe("../Survive/Ressources/herbe_1.png",30,30);
 
Ca ne te paraît pas un peu overkill de recharger complètement tes objets depuis le disque dur à chaque fois que tu les dessines (genre 60 fois par seconde) ?
Laurent Gomila - SFML developer

Ultimette

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Le draw() n'affiche rien
« Réponse #2 le: Juin 11, 2014, 02:37:09 pm »
Sisi, c'était temporaire vu que j'essaie d'avancer pas à pas pour pas commettre d'erreurs (j'en commets tellement :p )

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le draw() n'affiche rien
« Réponse #3 le: Juin 11, 2014, 02:45:48 pm »
Essaye de nous montrer un exemple complet minimal (en gros, une version simplifiée de ton code qui tient en quelques lignes -- et qui reproduit le problème bien sûr).
Laurent Gomila - SFML developer

Ultimette

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Le draw() n'affiche rien
« Réponse #4 le: Juin 11, 2014, 03:06:12 pm »
En version ultra minimale, ça affiche bien le sprite  :-\


(comme quoi j'suis pas si nul  ;D )

J'vais essayer de voir les différences qu'il y a, j'pense maintenant que la lacune vient de mes connaissances en C++ plutot qu'en SFML.  :D

PS : Vu que j'ai simplement supprimer des lignes inutiles pour l'exemple, je vois pas d'où vient le problème  :(

Ultimette

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Le draw() n'affiche rien
« Réponse #5 le: Juin 11, 2014, 03:22:03 pm »
Le problème venait du fait que je créais des GameObjectPhysics et qu'il aimait pas que j'appelle des fonctions de gameObject (Qui est pourtant un parent de GOP  ??? ) (Pourtant il passait bien dans les fonctions...) Faudra que je me renseigne :D


Et pour les textures, tu me conseilles d'utiliser un textureLoader et d'utiliser des pointeurs sur les textures pour les sprites ?
« Modifié: Juin 11, 2014, 03:25:15 pm par Ultimette »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le draw() n'affiche rien
« Réponse #6 le: Juin 11, 2014, 04:47:32 pm »
Si t'arrives à reproduire le problème dans un code montrable sur le forum, je veux bien jeter un oeil pour t'aider à comprendre.

En ce qui concerne les textures, un texture manager est une solution courante. Maintenant reste à voir quel problème tu cherches à résoudre ;)
Laurent Gomila - SFML developer

Ultimette

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Le draw() n'affiche rien
« Réponse #7 le: Juin 11, 2014, 06:53:33 pm »
Voilà ! j'ai fais une version minimale qui présente le soucis !

Dans le main :
Salle salle_test("../Survive/Ressources/map1.txt");
salle_test.draw(window);
 

Dans Salle.cpp :
void Salle::draw(sf::RenderWindow &window)
{
    GameObjectPhysics rocher("../Survive/Ressources/rocher_4.png");

    rocher.draw(window);
}
 

Dans GameObjectPhysics.cpp :
GameObjectPhysics::GameObjectPhysics(std::string filename)
{
    GameObject(filename, true);
}
 

Et dans GameObject.cpp :

GameObject::GameObject(std::string filename, bool estSolide)
{
    _texture.loadFromFile(filename);
    _sprite.setTexture(_texture);

    _estSolide = estSolide;
}

void GameObject::draw(sf::RenderWindow &window)
{
    window.draw(_sprite);
}
 


Je pense avoir mis le plus important  ;)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le draw() n'affiche rien
« Réponse #8 le: Juin 11, 2014, 08:01:09 pm »
Ca :

GameObjectPhysics::GameObjectPhysics(std::string filename)
{
    GameObject(filename, true);
}

Ce n'est pas comme ça qu'on appelle un constructeur de classe de base depuis un constructeur de classe dérivée. Là tu vas juste créer une instance anonyme de GameObject qui va être détruite dans la foulée.

GameObjectPhysics::GameObjectPhysics(std::string filename) : GameObject(filename, true)
{
}
Laurent Gomila - SFML developer

Ultimette

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Le draw() n'affiche rien
« Réponse #9 le: Juin 11, 2014, 08:10:52 pm »
Merci beaucoup :D

J'ignorais qu'il y avait une différence entre ces deux constructeurs ! J'aurais appris quelquechose :D