Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Leviathan

Pages: [1]
1
Bonjour,

Effectivement, je me suis rendu compte de mes bêtises, et je n'utilisais pas la méthode de la bonne façon. Merci pour vos réponses.

2
En pseudo-code, j'arrive à voir les choses. Mais c'est d'un point de vue d'implémentation que j'ai un problème. Toujours dans l'exemple donné, lorsque j'essaie d'écrire "detachChild(leftEscort)" le compilateur hurle à cause de types incompatibles. Si j'écris "detachChild(*leftEscort)", cette fois le programme plante tout simplement.

3
Bonjour,

Possesseur du livre SFML Game Development, j'ai terminé le chapitre 3 dans lequel est utilisé un graphe de scène. Cependant, je ne parviens pas à comprendre l'utilisation de la méthode detachChild() de la classe SceneNode. Voici un extrait du code :

Dans l'implémentation de la classe SceneNode :

// Les deux attributs de la classe, déclarés dans le .hpp
// std::vector<std::unique_ptr<SceneNode>> mChildren;
// SceneNode* mParent;

void SceneNode::attachChild(std::unique_ptr<SceneNode>child)
{
        child->mParent = this;
        mChildren.push_back(std::move(child));
}

SceneNode::std::unique_ptr<SceneNode> SceneNode::detachChild(const SceneNode& node)
{
        auto found = std::find_if(mChildren.begin(), mChildren.end(), [&] (Ptr& p) { return p.get() == &node; });
        assert(found != mChildren.end());

        std::unique_ptr<SceneNode>result = std::move(*found);
        result->mParent = nullptr;
        mChildren.erase(found);
        return result;
}

Et voilà un exemple d'utilisation (l'objet Aircraft hérite de SceneNode) :

// Attribut déclaré dans le .hpp
// Aircraft* mPlayerAircraft;

std::unique_ptr<Aircraft> leader(new Aircraft(Aircraft::Eagle, mTextures));
mPlayerAircraft = leader.get();

std::unique_ptr<Aircraft> leftEscort(new Aircraft(Aircraft::Raptor, mTextures));
mPlayerAircraft->attachChild(std::move(leftEscort));

Ici l'objet leftEscort a été attaché à l'objet mPlayerAircraft, et cela fonctionne effectivement bien. Mais ensuite je ne sais pas comment "détacher" cet objet nouvellement attaché: je ne sais pas du tout quoi indiquer en paramètre de detachChild(). J'ai regardé dans le code accompagnant le livre, detachChild() n'est jamais utilisé donc je n'ai pas pu me baser sur un exemple pour comprendre. Sauriez-vous m'éclairer sur ce point ?

Merci d'avance.

Pages: [1]
anything