2010-08-11 8 views
5

¿Alguien puede arrojar algo de luz sobre cómo un programa como ese podría estructurarse?¿Cómo hacen esos juegos de arena de Java para realizar un seguimiento de tantas partículas?

¿Qué clases de Java emplearían para realizar un seguimiento de tantas partículas y luego verificarlas para detectar colisiones? Las partículas necesitan saber qué partículas están cerca, o que no están cerca de nada para que puedan caerse.

Here's ejemplo, en caso de que no esté seguro de qué es un juego de arena.

+1

Esa es una distracción divertida. – AHungerArtist

+1

¿Has echado un vistazo a este hilo? http://www.scirra.com/forum/viewtopic.php?f=3&t=6909&p=54531 –

+0

El sitio al que se vincula tiene un foro de desarrollo. –

Respuesta

4

Matrices, principalmente.

  • Una matriz unidimensional de granos en movimiento activo, representada por dos coordenadas (y posible una velocidad si desea la aceleración gravitacional).
  • Una matriz bidimensional de bools (o colores), que representa las partes fijas del mundo.

El modelo de la física más simple es eliminar un grano una vez que está en reposo (por ejemplo, cuando las posiciones mundo abajo, de abajo a la izquierda y abajo a la derecha se llenan): en cambio, el mundo coordenada correspondiente se rellena Esto mantiene los cálculos manejables. Permita que un grano se mueva hacia abajo si la coordenada mundial izquierda o derecha debajo está libre. Las colisiones de granos entre los granos en movimiento pueden ignorarse sin pérdida de mucha verosimilitud.

(yo no puedo superar la cantidad de energía de la CPU que tenemos de sobra en estos días!)

+2

La verosimilitud es posiblemente la mejor palabra que existe. Gracias por la respuesta. – Stretch

+0

@Pontus Yo mismo hice un experimento al hacer un juego de arena en el lienzo de HTML5. Busqué esta pregunta porque quería saber si hay una manera más eficiente de hacerlo, porque la implementación que hice es más lenta que el infierno. Lo extraño es que javascript es lo suficientemente potente como para poder rastrear más de 1200 objetos en un entorno 3D con cero retraso, pero 200 objetos en una aplicación experimental de arena descendente lo pondrán de rodillas. [Aquí] (http://codesocialist.com/#/?s=b4) es mi experimento. Notarás que tengo una matriz para cada partícula y una matriz para partículas "terrestres". –

0

La versión simple se puede implementar sin muchos problemas en un viernes por la noche suelta (como lo hice hace un momento) Simplemente haga un programa con una matriz 2D (de bytes, enteros, lo que sea) que represente su campo. En cada garrapata, iterar sobre todos los elementos y hacer una verificación de:

  • Si el campo abajo (array [x] [y + 1]) está vacío, mover 1 punto hacia abajo (= ajuste [x] [y ] para vaciar, [x] [y + 1] a ocupado)
  • De lo contrario, si [x-1] [y + 1] está vacío, vaya allí.
  • De lo contrario, si [x + 1] [y + 1] está vacío, vaya allí.

Eso es lo básico. A continuación, debe agregar comprobaciones como "no repetir" el cálculo de un grano (establezca un indicador en la nueva posición que se verifica en las siguientes iteraciones).

Seguí this tutorial, es bastante bueno, no demasiado largo, pero aún señala errores comunes y cosas por el estilo.

Cuestiones relacionadas