Bonjour, me voilà de nouveau, avec un autre problème cette fois...
J'ai créé des monstres dans un tableau de classes... Ceux ci attaquent le joueur, tout va bien, avec une IA un peu sommaire, mais pas vraiment dérangeante. Seul soucis, maintenant je voudrais que lorsque mon curseur (en 2D) se trouve sur un node je puisse savoir du quel il s'agit (pouvoir le récupérer dans ma classe) afin de pouvoir lui donner un méchant coup. En fait, le style de caméra est très similaire à Diablo. Quand je clique sur le terrain, il se déplace, et si jamais je clique sur un monstre il tape. Mais comment savoir s'il est sur un monstre ? Il faudrait faire une collision pour chaque monstre, mais n'est-ce pas un peu lourd ? Cela consomme-t-il beaucoup de ressources ? Avez vous un exemple de code à ce propos ?
Merci d'avance...
Hors ligne
Salut
Le mieux est d'utiliser une fonction du gestionnaire de collision qui permet de recuperer un node qui se trouve sur la ligne partant du centre de la camera et passant par le curseur.
Il suffit alors de comparer le node obtenue avec tout tes nodes des méchants et de trouver le bon tu peut autrement utiliser un système d'id basé sur celui d'irrlicht ou encore faire dérivé si tes monstres sont géré par des classes de ISceneNode et de faire une conversion de pointeur lors de la récupération. Cette dernière solution, peut etre la moin couteuse en ressource est sureme est surement la plus difficile a implemanter.
Voila prend mes idées avec des pincettes car je suis loin d'etre un expert, je te dis juste commment je ferais.
dark calculator
P.S. : Si tu ne comprends pas tout ou si tu veux un exemple de code, n'hésitre pas a demander
Hors ligne
Effectivement, je comprends comment tu veux faire...
Je pense que je vais essayer, mais as tu un exemple de code qui renvoie un node. Car récupérer une position n'est pas suffisant, sinon il y aura un gros risque de beaucoup consommer de resources, s'il faut vérifier la position avec une marge d'erreur. Surtout que ça pourrait valoir pour un autre node. En clair, existe-t-il (et si oui comment marche-t-elle ?) une fonction qui permet de renvoyer un node qui est à la collision du curseur.
Pourrais-tu me donner un exemple de code ?
Hors ligne
int getMechantSelected()
{
ISceneNode* selectednode = smgr->getSceneCollisionManager()->getSceneNodeFromScreenCoordinatesBB(curPos);
for (int i=0;i<nbrMechant;i++)
if (selectednode==mechant[i]->node)
return i
return -1;
}
Hors ligne
Tu peux donner un identifiant à tes nodes à l'aide de la méthode setID(s32 ID). T'as juste à définir des plages d'identifiants pour les différents types de monstres, comme çà tu pourras savoir quel type de monstre c'est (méthode getID) sans boucler sur toutes les nodes (ce qui ne me semble pas très optimal).
Hors ligne
Merci à tous loes deux. Dark, ta methode marche bien, mais il est vrai que s'il y a une methode plus optimale, je suis preneur. Je vais faire des recherches sur setID. Perceval, si tu as un petit exemple au cas où, ça m'aiderait bien. De toute manière je vais rechercher de mon côté aussi.
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 46 invités en ligne Aucun membre connecté RSS Feed |