#0 

28-08-2008 19:06:02

Fremtid
Membre
Date d'inscription: 09-08-2008
Messages: 12

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


#1 

28-08-2008 19:23:13

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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


#2 

28-08-2008 19:35:44

Fremtid
Membre
Date d'inscription: 09-08-2008
Messages: 12

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


#3 

28-08-2008 19:53:47

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

Code:

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


#4 

28-08-2008 20:55:58

Perceval
Abonné
Date d'inscription: 20-10-2006
Messages: 105

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


#5 

29-08-2008 11:28:45

Fremtid
Membre
Date d'inscription: 09-08-2008
Messages: 12

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
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
132 invités en ligne
Aucun membre connecté
RSS Feed