CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Récupérer le type d'un objet en c++

Paxlord
Paxlord
Niveau 8
22 juillet 2014 à 03:05:26

Salut à tous,

Je me suis mis récemment a la programmation d'un "prototype" de jeux en c++ avec la sfml. Mais je bloque sur quelque chose de tout bête... Je m'explique :

J'ai une classe Entité qui est hérité par mon joueur, les ennemis et aussi par les Pnj par exemple. Et je gère les collisions dans une autre classe (mainCollision).

Le problème c'est que la méthode entityCollision prend en paramètre deux entité et du coup j'ai besoin de savoir quel type d'entité c'est, et la je bloque.

Merci de m'éclairer, :)

godrik
godrik
Niveau 30
22 juillet 2014 à 03:51:07

C'et principalement parceque ton architecture objet est foireuse. Tu ne devrais pas avoir besoin de resoudre une fonction ou tous les parametres sont de type inconnus.

Le mieux est que tu ne teste que les collisions qui ont du sens. C'est a dire que tu connaisses a l'avances les types de collisions que tu veux traiter et ne tester que celle la. En bref, tu as deja une liste d'objet organise par type et du fait lorsque tu calcul ta collision, tu connais deja les types de objets.

Sinon, tu peux avoir recours a des techniques bizarre et complique comme le pattern du visiteur (je te laisse google ca) ou encore aux Run-Time Type Information. Mais les deux sont assez peu performant.

DirectX11
DirectX11
Niveau 6
22 juillet 2014 à 03:53:36

En gros tu as une interface entity ?

tu peu les typer avec une enum.
et après tu te retrouve avec un truc du genre
if (entity.getType() == entityType::player) ..

Sinon tu pourrais template ton entityCollision et le spécialiser. mais ca demande de réécrire une partie de ton code.

sinon en C++11 il existe decltype mais bon je ne pense pas que ça te soit utile.

DirectX11
DirectX11
Niveau 6
22 juillet 2014 à 03:57:00

Enfin +1 a Godrik tu as un problème de conception.

Paxlord
Paxlord
Niveau 8
22 juillet 2014 à 04:09:21

Du coup je devrais plutôt faire une méthode par type de collisions, une pour Joueur-> Ennemi, Joueur -> Pnj. Au début je pensais faire sa mais je me disais que faire une méthode qui englobais toutes les collision serais plus optimisé.

Aldebran
Aldebran
Niveau 10
22 juillet 2014 à 21:09:11

Ce qui me paraît le plus propre en terme de design logiciel est de définir une interface Collider avec une méthode getHitBox(). Ensuite il suffit que tes classes Joueur, Ennemi et PNJ implémentent l'interface Collider, et que la méthode entityCollision prenne en paramètre deux Collider au lieu de deux entités.

Normalement la gestion des collisions ne devrait pas nécessiter de savoir quel est l'objet qui entre collision, il suffit juste que chaque objet pouvant entrer en collision fournisse les informations permettant de déterminer s'il y a collision ou non.

Après, ce n'est pas vraiment le design que j'adopterais dans l'absolu, mais ça devrait te permettre de résoudre simplement ton problème.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment