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.