Comment puis-je nettoyer les décombres créés par un joueur?

92

Dans mon dernier jeu que je crée, vous pouvez découper un objet 2D de manière arbitraire, comme le montre ce gif:

entrez la description de l'image ici

Vous pouvez continuellement le couper en centaines ou milliers de pièces. Cela ne crée pas beaucoup de retard, car ils sont toujours dans un état physique en sommeil, mais il y a un problème lorsque vous les faites bouger.

Je ne sais pas trop comment le faire pour qu'il n'y ait pas tant de décombres à couper en morceaux. Je ne veux pas vraiment les supprimer après un certain temps; Je n'aime pas comment, si vous revenez à quelque chose que vous avez coupé après un moment, cela a disparu au hasard.

Comment puis-je nettoyer les décombres créés par un joueur?

Ducktor
la source
17
Votre question ne dit pas vraiment ce que vous voulez réellement. Vous dites que vous voulez "nettoyer les décombres", mais vous ne voulez pas non plus que les décombres disparaissent au bout d'un moment.
Philipp
10
Tiny & Big détruirait les plus petites pièces. Je suis sûr que les gros morceaux sont restés pour le niveau, mais je ne m'en souviens pas très bien. En voici un exemple: youtu.be/236ly0ApPqg?t=177
TyCobb le
2
Les articles hors de portée peuvent être retirés et remplacés lorsque vous y revenez.
Loren Pechtel
3
Juste mon petit avis, mais définir une taille minimale d'objet pour être effectuée par l'action de coupe. S'il est difficile de distinguer le morceau que vous coupez, vous ne pouvez pas le couper. (Juste à côté, belle dynamique de jeu, celle-ci a définitivement les jambes!)
AJFaraday
12
Je tiens à préciser que je n’accorde aucun crédit à la fabrication du mécanisme de coupe car c’est un atout gratuit que j’ai trouvé sur github . J'utilise l'exemple donné pour vous donner une idée de la façon de l'utiliser pour couper des objets. (Le joueur a été codé par moi et il en sera de même pour tout le reste du jeu.
Ducktor

Réponses:

71

Tout d’abord, cette mécanique de jeu a l’air d’être très amusante, alors félicitons-nous d’y penser! Voici deux solutions simples pouvant être utilisées indépendamment ou ensemble pour résoudre ce problème particulier:

Enlevez les très petits morceaux

Il ne sert à rien de garder le contact avec de minuscules morceaux de collision qui ne gêneront pas vraiment le joueur ou n'auront aucun effet réel sur l'environnement. Calculer la logique de collision supplémentaire ne vaut tout simplement pas la peine. Supprimez-les ou supprimez-les.

Limiter le nombre de joueurs

Avoir des coupes illimitées pourrait rendre beaucoup de vos casse-têtes très simples si vous pouviez couper chaque objet gênant en un tas de bouillie. Ne donnez au joueur que quelques coupes (ou laissez-le se recharger lentement au fil du temps) et vous constaterez probablement que cela complique encore plus vos énigmes et vous évite d'avoir à gérer des milliers de fragments.

Chase Sandmann
la source
1
Je pense que je vais faire le premier, car je ne prévois pas de créer de puzzle.
Ducktor
36
Micheal Bay la place quand les petits morceaux disparaissent aussi. Ce n'est pas un journal, c'est de la sciure de bois. Ou de la sciure de bois explosant. pourquoi pas?!
CorsiKa
26
@corsiKa Si vous ajoutez des effets enflammés au mouvement de coupe, vous pourriez faire en sorte que les coupes laissent des marques de brûlures sur les points de contact, avec une certaine largeur. Si l'objet est si petit qu'il est complètement "brûlé", il pourrait exploser en flammes et se consumer en quelques instants.
T. Sar - Réintégrer Monica
155

Déterminez votre goulot d'étranglement

Quelques centaines d'objets en mouvement ne devraient pas être un problème. Cependant, quelques centaines d'objets en collision pourraient être. Il faudra quelques essais, mais je crois que le goulot d'étranglement que vous avez est la collision.

À propos, de combien d'objets parlons-nous? Quelle est la plateforme? Cent objets pour un jeu mobile ne sont pas les mêmes que cent pour un jeu Web ou cent objets pour un jeu de bureau.

Testez le même jeu, mais en désactivant les collisions entre les objets coupés, et voyez si vous êtes en retard sur des quantités similaires d'objets. Si tel est le cas, cela signifie que la quantité d'objets est la cause du problème; sinon, les collisions sont le problème.

Cela éclairera votre décision sur ce que vous ferez pour améliorer les performances. Toutes les idées ci-dessous ne s'appliqueront pas, et vous aurez quand même besoin de tests.


Je ne parlerai pas d'optimisation pour un grand nombre d'objets éloignés du lecteur, car le problème semble venir lors de l'interaction avec les objets.

il y a un problème quand vous les faites bouger.

Si le problème survient lors de l'interaction avec les objets, il est difficile de savoir comment le supprimer des objets non visibles va le résoudre ... mais je suppose que cela pourrait aider.

Je dirais simplement que si les objets éloignés du joueur posent un problème, vous pouvez commencer par avoir des niveaux plus petits, ou envisager de diviser le jeu en morceaux que vous pouvez charger et décharger en fonction de la direction du joueur.


Hors limites

Je crois que lorsqu'il s'agit de nettoyer les décombres, la première chose à faire est de supprimer les objets hors limites. Par exemple, la pièce qui est tombée dans une fosse. S'il n'y a aucun moyen que le joueur puisse y aller pour le voir, il n'y a aucune raison de le garder.

J'y reviendrai.


Rendez-le plus réaliste (partie 1)

Lorsque vous coupez du bois avec une scie, une hache ou un outil similaire, vous perdez du matériel (sciure de bois, copeaux, etc.). Même si vous coupez au laser, le laser brûlera du bois. De plus, pour les choses qui ne sont pas du bois, il y aura généralement des déformations autour de la coupe, des éboulements, etc.

Ce que je dis, c'est que la coupe n'est pas parfaite et que certains matériaux seront perdus. Vous pouvez modéliser cela dans votre jeu. Ce truc magique qui coupe le rouge a de l’épaisseur. Supprimez cette épaisseur des objets (ajoutez des effets de particules si vous vous sentez trop coupable).

Cela signifie que vous ne pourrez pas couper quoi que ce soit plus petit que cette épaisseur. En fait, tenter de le faire l'enlèvera du jeu. Ça c'est bon! Cela signifie qu'il y a une limite supérieure à la quantité de décombres qu'il y aura, et qu'il existe un moyen mécanique de le nettoyer en jeu.


Changer de vitesse pour les petits objets

Cela fonctionnera mieux si les collisions sont le problème.

Lorsqu'un objet est trop petit, les détails de ses différents angles sont moins pertinents. Vous pourriez changer pour un mécanicien de collision moins précis. Par exemple, vous pouvez utiliser des collisionneurs de cercle.

Vous pouvez traiter des objets même plus petits sans se heurter; Ne considérez que la collision entre eux et les objets de l'agent (tels que l'avatar du joueur ou les personnages contrôlés par l'IA).

Enfin, de très petits objets pourraient simplement se transformer en poussière (effets de particules).


Rendez-le plus réaliste (partie 2)

Cela fonctionnera mieux si les collisions sont le problème.

Le matériau se déforme et se casse sous la pression. Si vous vous retrouvez avec de longs objets très peu épais, décomposez-les en objets plus petits afin qu'ils puissent tirer parti de la solution ci-dessus.

On peut prétendre qu'il avait une épaisseur trop faible pour s'effriter et se briser lorsque vous le frappez.


Fusionner des objets

Cela fonctionnera mieux si le nombre d’objets pose problème.

Une astuce courante utilisée par de nombreux jeux pour traiter de grandes quantités de chutes pouvant nuire aux performances consiste à regrouper les chutes.

Vous pouvez essayer quelque chose de similaire pour les petits objets proches les uns des autres. Faites-les devenir un seul objet. Cependant, je ne veux pas coller les morceaux ensemble. Je veux créer un seul objet pour gérer leur physique; vous pouvez toujours représenter les pièces individuelles qui composent l'objet, en utilisant éventuellement des techniques apparentées aux effets de particules.


Rendez-le plus réaliste (partie 3)

Avez-vous entendu parler du vent? Il y a du vent dans le monde réel.

Utilisez le vent pour repousser les petits objets.

Je sais que cela peut paraître contre-intuitif, car cela signifie que les petits objets ne doivent pas se reposer, du moins pas tout de suite. Lisez ci-dessous avant de faire votre jugement.

Vous pouvez utiliser le vent pour repousser un petit objet avant - ou dès que - ils commencent à s'empiler. Ce qui fonctionnera mieux si vous utilisez des optimisations pour de petits objets (par exemple, en les combinant ou en supprimant les collisions).

De plus, si vous pouvez utiliser le vent pour pousser des objets dans des fosses ou hors des limites, vous pouvez vous en servir d'excuse pour retirer les objets. Je vous ai dit que j'allais y revenir. Même si vous ne le faites pas, cela peut servir d'excuse pour retirer de petits objets trop éloignés du joueur. Imaginez que le vent les ait éliminés alors que le joueur ne regardait pas.

Vous pouvez supprimer des objets lorsque le joueur ne regarde pas, vous avez ma bénédiction.

En plus de cela, vous avez maintenant une excuse pour ajouter du vent, que vous pouvez ajouter du vent dans le cadre d'autres mécanismes ou obstacles du jeu. Vous pouvez même ajouter au récit l’esprit du vent qui essaie de garder les choses propres, si vous en avez l’intention.

Remarque : vous n'avez pas nécessairement à déclencher le vent quand il faut nettoyer les gravats (bien que cela fonctionnerait), vous pouvez probablement avoir du vent se produire à des intervalles aléatoires.


Castors!

Un castor agaçant vient voler ton bois!

Maintenant vous avez un type d'ennemi!

En plus, bien sûr, ils enlèvent du bois pendant que vous ne cherchiez pas. Vous pouvez même le concevoir pour que vous puissiez voir un castor s'enfuir avec un morceau de bois qui était autrefois un tas. Cela ferait un moment mémorable, expliquera pourquoi le bois a disparu et résoudra tous les problèmes de performances auxquels vous êtes confrontés, tout à la fois.


C'est tous les compromis

Il existe des limitations de la plate-forme ou des outils que vous avez choisis. Même le temps et le budget dont vous disposez pour développer le jeu sont une limitation. Vous ne pouvez pas faire une simulation parfaite de la réalité, encore . Personne ne peut .

Tous les développeurs travaillent dans les limites imposées par leur plate-forme cible et les outils qu’ils possédaient à l’époque. Les meilleurs jeux devaient faire des compromis pour rendre le jeu amusant et attrayant… même si cela signifiait moins de réalisme, en fait, souvent, ils sont amusants et attrayants, car ils ne sont pas réalistes.

Laissez la créativité venir de ces limitations.

Bien que vous puissiez également rendre votre jeu plus réaliste , en choisissant les éléments de la réalité qui conviennent à votre développement. Considérez que la suppression d’objets éloignés du joueur fait partie du coût de la réalisation d’un jeu amusant.

Theraot
la source
36
Cet article est la réponse définitive au problème du débordement de gravats. Vous avez fourni un résumé exhaustif des techniques, tout en soulignant clairement la nécessité d’être créatif et de choisir des solutions adaptées à votre situation, tout en montrant comment la mécanique et la narration peuvent s’articuler. Je voulais juste dire que j'ai du mal à exprimer à quel point je suis impressionné.
Dragomok
12
Tenter de couper un objet plus petit que la largeur du faisceau n’a pas besoin de le faire disparaître complètement, mais peut produire un objet plus petit. L'important est que le nombre d'objets ne puisse être augmenté que si l'objet coupé dépasse la largeur du faisceau.
Supercat
1

Le monde est discret. Vous ne pouvez pas rendre un objet plus petit qu'un pixel, ne laissez donc pas de tels objets exister. (Ceci est similaire à certains points de réalisme faits par Theraot .)

En effet, vous pouvez l’obtenir gratuitement: le joueur spécifie sa ligne de coupe comme une ligne discrétisée à l’écran. La coupe a pour effet de diviser chaque objet en sous-objets constitués, respectivement, des pixels situés sur ou au-dessous de cette ligne, et des pixels strictement situés au-dessus de celle-ci. Un objet d'un pixel ne peut pas être à la fois au-dessus et au-dessous de la ligne, il ne peut donc pas être coupé par cet algorithme.

Si le fait de couper toutes les tables de coupe en pixels individuels vous laisse toujours trop d’objets à suivre, une taille minimale plus grande peut tout de même fonctionner.

Ou ne t'inquiète pas pour ça. Si le joueur est prêt à passer beaucoup de temps à couper des objets en poussière, il n'est évidemment pas pressé pour pouvoir gérer le retard qu'il a causé. ;-)

David Richerby
la source