¿Cómo puedo limpiar el exceso de escombros creados por el jugador?


92

En mi último juego que estoy haciendo, puedes cortar un objeto 2D de forma arbitraria, como se muestra en este gif:

ingrese la descripción de la imagen aquí

Puede cortarlo continuamente en cientos o miles de piezas. Esto no crea mucho retraso, porque siempre están en un estado físico de sueño, pero hay un problema cuando haces que se muevan.

No estoy realmente seguro de cómo lidiar con hacerlo para que no haya tantos escombros al cortar algo. Realmente no quiero eliminarlos después de un cierto tiempo; No me gusta cómo, si vuelves a algo que cortaste después de un tiempo, desapareció al azar.

¿Cómo puedo limpiar el exceso de escombros creados por el jugador?


17
No está realmente claro en su pregunta qué es lo que realmente quiere. Dices que quieres "limpiar los escombros", pero al mismo tiempo dices que no quieres que los escombros desaparezcan después de un tiempo.
Philipp

10
Tiny & Big destruiría las piezas más pequeñas. Estoy bastante seguro de que las piezas más grandes se quedaron para el nivel, pero no lo recuerdo completamente. Aquí hay un ejemplo: youtu.be/236ly0ApPqg?t=177
TyCobb

2
Las cosas que están fuera del alcance se pueden quitar y reemplazar cuando vuelvas a ellas.
Loren Pechtel

3
Solo mi pequeña opinión, pero establezca un tamaño de objeto mínimo que se efectuará por la acción de corte. Si es difícil seleccionar la pieza que está cortando, entonces no puede cortarla. (Solo aparte, buena dinámica de juego, ¡esta definitivamente tiene piernas!)
AJFaraday

12
Me gustaría decir que no me atribuyo crédito por hacer la mecánica de corte ya que es un activo gratuito que encontré en github . Usando el ejemplo, te da una idea de cómo usarlo para cortar objetos. (El jugador fue codificado por mí y también lo hará todo lo demás en el juego.
Ducktor

Respuestas:


71

En primer lugar, parece que la mecánica del juego podría ser súper divertida, ¡así que felicidades por pensarlo! Aquí hay dos soluciones simples que podrían usarse independientemente o juntas para resolver este problema en particular:

Eliminar piezas muy pequeñas

No tiene mucho sentido mantenerse cerca de pequeñas piezas de colisión que realmente no obstaculizarán al jugador o tendrán un efecto real en el medio ambiente. Calcular la lógica de colisión adicional simplemente no vale la pena, por lo tanto, elimine estas piezas o elimine la colisión en ellas.

Limite los cortes del jugador

Tener cortes ilimitados podría hacer que muchos de tus rompecabezas sean realmente simples si puedes cortar cada objeto que te impide en una pila de papilla. Dale al jugador solo unos pocos cortes para jugar (o haz que se recargue lentamente con el tiempo) y probablemente descubras que hace que tus acertijos sean más desafiantes además de eliminar los dolores de lidiar con la colisión en miles de fragmentos.


1
Creo que haré el primero ya que no planeo hacer ningún tipo de juego de rompecabezas.
Ducktor

36
Micheal Bay lo levanta cuando las piezas pequeñas también desaparecen. Eso no es un tronco, es aserrín. O aserrín explosivo. ¡¿Por qué no?!
corsiKa

26
@corsiKa Si agrega algunos efectos de fuego al movimiento de corte, puede hacer que los cortes dejen marcas de quemaduras en los puntos de contacto, con un cierto ancho. Si el objeto es tan pequeño que está completamente "quemado", podría estallar en llamas y quemarse en unos momentos.
T. Sar - Restablece a Monica el

155

Descubre tu cuello de botella

Unos cientos de objetos en movimiento no deberían ser un problema. Sin embargo, algunos cientos de objetos colisionantes podrían ser. Tomará algunas pruebas, pero creo que el cuello de botella que tienes es la colisión.

Por cierto, ¿de cuántos objetos estamos hablando? ¿Qué es la plataforma? Cien objetos para un juego móvil no es lo mismo que cien para un juego web o cien objetos para un juego de escritorio.

Pruebe el mismo juego pero con colisiones entre los objetos cortados deshabilitados, y vea si logra retrasar cantidades similares de objetos. Si ese es el caso, significa que la gran cantidad de objetos es la causa del problema; de lo contrario, las colisiones son el problema.

Esto informará su decisión sobre lo que hará para mejorar el rendimiento. No todas las ideas a continuación se aplicarán, y de todos modos necesitará pruebas.


No hablaré sobre la optimización para una gran cantidad de objetos lejos del jugador, ya que el problema parece surgir al interactuar con los objetos.

hay un problema cuando haces que se muevan.

Si el problema ocurre al interactuar con los objetos, no está claro cómo eliminarlo no lo resolverá ... sin embargo, supongo que podría ayudar.

Solo diré que si los objetos alejados del jugador son un problema, puedes comenzar por tener niveles más pequeños, o buscar dividir el juego en trozos que puedas cargar y descargar dependiendo de dónde vaya el jugador.


Fuera de los límites

Creo que cuando se trata de limpiar los escombros, lo primero que debe tener es eliminar los objetos que están fuera de los límites. Por ejemplo, la pieza que cayó a un pozo. Si no hay forma de que el jugador pueda llegar allí para verlo, no hay razón para mantenerlo cerca.

Volveré a esto.


Hazlo más realista (parte 1)

Cuando corte madera con una sierra, hacha o herramienta similar, habrá material perdido (aserrín, virutas, etc.). Incluso si cortas con un láser, el láser quemará un poco de madera. Además, para cosas que no son de madera, generalmente habrá deformación alrededor del corte, desmoronamiento, etc.

Lo que digo es que el corte no es perfecto y se perderá algo de material. Puedes modelar eso en tu juego. Esa cosa roja mágica que corta tiene grosor. Elimina ese grosor de los objetos (agrega efectos de partículas si te sientes demasiado culpable).

Esto significa que no podrás cortar nada que sea más pequeño que ese grosor; de hecho, intentar hacerlo lo eliminará del juego. ¡Eso es bueno! Significa que hay un límite superior de la cantidad de escombros que habrá, y hay una forma mecánica de limpiarlo en el juego.


Cambiar engranajes para objetos pequeños

Esto funcionará mejor si las colisiones son el problema.

Una vez que un objeto es demasiado pequeño, los detalles de los diferentes ángulos que tiene son menos relevantes. Podría cambiar a una mecánica de colisión menos precisa. Por ejemplo, podría usar colisionadores circulares.

Puede tratar incluso objetos más pequeños sin colisión entre ellos; solo considere la colisión entre ellos y los objetos del agente (como el avatar del jugador o los personajes controlados por la IA).

Finalmente, los objetos muy pequeños podrían convertirse en polvo (efectos de partículas).


Hazlo más realista (parte 2)

Esto funcionará mejor si las colisiones son el problema.

El material se deforma y se rompe bajo presión. Si termina con objetos largos con muy poco grosor, divídalos en objetos más pequeños para que puedan aprovechar la solución anterior.

Podemos fingir que tenía un grosor demasiado pequeño que se desmorona y se rompe cuando lo golpeas.


Fusionar objetos

Esto funcionará mejor si el número de objetos es el problema.

Un truco común que muchos juegos usan para lidiar con grandes cantidades de caída que podrían dañar el rendimiento es agrupar las gotas juntas.

Podrías probar algo similar para objetos pequeños que están cerca uno del otro. Que se conviertan en un solo objeto. Sin embargo, no me refiero a unir las piezas. Me refiero a crear un solo objeto para manejar su física; aún puede representar las piezas individuales que formaron el objeto, tal vez utilizando técnicas similares a los efectos de partículas.


Hazlo más realista (parte 3)

¿Has oído hablar del viento? Hay viento en el mundo real.

Usa el viento para alejar los objetos pequeños.

Sé que puede sonar contra intuitivo, porque significa que los objetos pequeños no descansan, al menos no de inmediato. Lea a continuación antes de hacer su juicio.

Puede usar el viento para empujar objetos pequeños antes, o tan pronto como comiencen a acumularse. Lo que funcionará mejor si está utilizando optimizaciones para objetos pequeños (como combinarlos o eliminar colisiones entre ellos).

Además, si puede usar el viento para empujar elementos a los hoyos o fuera de los límites, puede usarlo como una excusa para eliminar los elementos. Te dije que volvería a eso. Incluso si no lo hace, puede servir como una excusa para eliminar objetos pequeños que están demasiado lejos del jugador, solo finja que el viento los eliminó mientras el jugador no estaba mirando.

Puedes quitar algunos objetos mientras el jugador no está mirando, tienes mi bendición.

Además de eso, ahora tienes una excusa para agregar viento, que puedes agregar como parte de otras mecánicas u obstáculos del juego. Incluso podría agregar a la narrativa el espíritu del viento que trata de mantener las cosas limpias, si así lo desea.

Nota : No necesariamente tiene que desencadenar el viento cuando hay escombros para limpiar (aunque eso funcionaría), es probable que el viento ocurra a intervalos aleatorios.


Castores!

¡Un castor molesto viene y roba tu madera!

¡Ahora tienes un tipo enemigo!

Además, por supuesto, eliminan la madera mientras no estabas mirando. Incluso puede diseñarlo para que vuelva a ver a un castor huyendo con un pedazo de madera donde solía ser una pila. Eso sería un momento memorable, explicará por qué desapareció la madera y resolverá algunos de los problemas de rendimiento que enfrenta, todo a la vez.


Todo es compensaciones

Existen limitaciones de la plataforma o las herramientas que ha elegido, incluso el tiempo y el presupuesto que tiene para desarrollar el juego es una limitación. Aún no puedes hacer una simulación perfecta de la realidad . Nadie puede .

Todos los desarrolladores trabajan dentro de las limitaciones que su plataforma objetivo y las herramientas que tenían en ese momento les impusieron, y los mejores juegos tenían que hacer concesiones para que el juego fuera divertido y atractivo ... incluso si eso significa menos realismo, de hecho, muchas veces son divertidas y atractivas porque no son realistas.

Deje que la creatividad provenga de esas limitaciones.

Sin embargo, también puedes hacer que tu juego sea más realista , eligiendo las partes de la realidad que sean convenientes para tu desarrollo. Tenga en cuenta que a veces quitar objetos que están lejos del jugador es parte del costo de hacer un juego divertido.


36
Esta publicación es la respuesta definitiva al problema del desbordamiento de escombros. Ha proporcionado un resumen exhaustivo de las técnicas, al tiempo que muestra claramente la necesidad de ser creativo y elige soluciones que funcionen para sus circunstancias, al tiempo que muestra cómo la mecánica y la narrativa pueden fluir juntas. Solo quería decir que tengo problemas para expresar cómo estoy impresionado.
Dragomok

12
Intentar cortar un objeto más pequeño que el ancho del haz no necesita hacer que el objeto desaparezca por completo, sino que puede producir un objeto más pequeño. Lo importante es que el número de objetos solo se puede aumentar si el objeto cortado excede el ancho del haz.
supercat

1

El mundo es discreto. No puede renderizar un objeto más pequeño que un píxel, así que no permita que existan tales objetos. (Esto es similar a algunos de los puntos de realismo hechos por Theraot ).

De hecho, puede obtener esto de forma gratuita: el jugador especifica su línea de corte como esencialmente una línea discreta en la pantalla. El efecto del corte es dividir cada objeto en los subobjetos que consisten, respectivamente, en los píxeles en o debajo de esa línea, y los píxeles estrictamente por encima de ella. Un objeto de un píxel no puede estar tanto encima como debajo de la línea, por lo que este algoritmo no puede cortarlo.

Si cortar todas las tablas de cortar en píxeles individuales aún te dejaría con demasiados objetos para seguir, un tamaño mínimo más grande aún podría funcionar.

O simplemente no te preocupes por eso. Si el jugador está preparado para pasar mucho tiempo cortando objetos en polvo, obviamente no tiene prisa para poder lidiar con el retraso que causó. ;-)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.