2010-07-07 6 views
1

J'ai commencé à me lancer dans le développement de jeux; J'ai fait quelques tutoriels et lu beaucoup d'articles, mais une chose dont je ne suis pas sûr est de savoir quelle est la meilleure façon de gérer un grand nombre d'objets temporaires, par ex. balles.Meilleure façon de gérer les choses comme des balles dans un jeu?

Si chaque entité devait gérer ses propres puces, devrais-je avoir un gestionnaire global de puces ou devrais-je créer chaque puce comme un nouvel objet individuel complet (cela semble plutôt inefficace)?

De même, lors de l'utilisation d'un motif de composant, que dois-je faire au sujet des propriétés qui semblent génériques, par ex. position, vitesse, etc.? Certaines choses que j'ai lues semblent penser que tout devrait être dans une sorte de composant alors que d'autres semblent penser que les propriétés génériques qui seront communément accessibles par une variété de composants devraient être membres de la classe d'entité elle-même. Pardonnez-moi, ce sont probablement simples mais je veux m'assurer que je pense dans la bonne direction.

Merci beaucoup!

+1

Je n'ai pas beaucoup d'expérience, mais regardez le code source de jeux comme Doom ou Quake. AFAIK, ils ont des objets "pleins" pour les trucs lents et mobiles comme les Rockets et pour les trucs "rapides"/invisibles comme les balles, ils "dessinent" une ligne et voient si ça frappe quelque chose (comme Raytracing). Mais je ne l'ai pas vraiment vérifié. Assurez-vous que chaque balle/fusée/tout a une durée de vie définie (Les roquettes explosent après X secondes, et la ligne "virtuelle" pour les balles se termine après Y Mètres pour éviter d'entrer dans l'infini) –

+1

Il est à noter que beaucoup de jeux n'implémentent pas de balles comme quoi que ce soit plus qu'une raycast et un résultat. Il n'y a rien qui doive persister; le joueur appuie sur la gâchette, vérifie si quelque chose va attraper la "balle", endommage cette chose. Je suppose que vous auriez besoin de créer quelque chose si vous effectuez un dosage/report de vos tests de ligne de vue/de collision, mais ce ne sera pas nécessairement un objet «balle». –

+0

Je suis au courant de ce Dash, mais je pensais à quelque chose dans le genre des jeux d'arcade où il pourrait y avoir une grande quantité de projectiles visibles (pensez à des tireurs verticaux ou quelque chose comme des astéroïdes). Merci pour votre commentaire. – JamesK89

Répondre

3

La création de chaque balle en tant qu '«objet entièrement soufflé» ne devrait pas être trop inefficace - jetez un oeil au Object pool pattern, qui décrit un moyen d'accélérer ces créations d'objets. En ce qui concerne votre question concernant les composants et les propriétés génériques, cela dépend de la manière dont vous souhaitez suivre l'architecture des composants. Si vous voulez être très strict avec l'architecture des composants, chaque propriété doit être dans un composant et les différents composants doivent communiquer entre eux. Sinon, pour des raisons d'efficacité, partagez certaines propriétés dans l'objet principal. Pour plus d'informations, jetez un oeil à this page sur le modèle de comportement des composants.

+0

Merci, je n'ai jamais pensé à utiliser un pool d'objets pour les balles. C'est une bonne chose que Stack Overflow existe, sinon nous manquerions toutes sortes de solutions intelligentes. Si quelqu'un d'autre a quelque chose à ajouter, j'aimerais l'entendre et apprendre. – JamesK89

3

Le Quake d'origine utilise un pool de taille fixe pour les entités (qui sont également parfois appelés édits). Tout ce dont l'existence persiste entre les cadres est une entité. Cela inclut les choses physiques comme le monde et les portes, les choses physiques rectangulaires comme les monstres, les joueurs et les ongles, les choses transparentes comme les armes, les objets rectangulaires invisibles mais touchables comme les champs de déclenchement et les choses totalement non physiques. Je pense que la limite dans Quake est quelque chose comme 700 édits; le jeu va planter si la limite est dépassée. Je pense que les édits sont simplement stockés dans un tableau, puisque chaque propriété qui existe pour un édit existe pour chacun d'eux.