Vinculación de objetos a la lista de edición manual posterior (Game Engine / Marco - Entidad parte de gestión)

StackOverflow https://stackoverflow.com/questions/2077340

  •  21-09-2019
  •  | 
  •  

Pregunta

En primer lugar hola, esta es mi primera vez aquí. Estoy codificador joven (15) y este es mi segundo intento de hacer un juego (en realidad toda motor reutilizable juego y marco, no está seguro de cómo llamarlo, tal vez GDK?), Mientras que por lo que es mucho más organizado este momento.

NOTA IMPORTANTE: Estoy usando XNA marco, por lo que el motor del juego no es puramente gestión DirectX bajo nivel! Estoy tratando de ampliar XNA con clases predefinidas que será fácil de insertar en cualquier juego y gestionar más adelante!

Me quedé atrapado en encontrar una manera de poner una entidad en la lista de WorldManager, más tarde recuperar la entidad para cambios directos, y luego poner de nuevo a la lista (por eso se usa con el método Update).

Mis ideas (y preguntas) fueron los siguientes:

  1. La mejor solución posible sería que de alguna manera la entidad vinculada a la lista, así como actualizar el objeto entidad solitaria que se actualiza en la lista también. Por desgracia, no sé cómo hacerlo, y esto podría ser la mejor respuesta.

  2. Lo que yo también pensaba era en editar la entidad creé primero y, a continuación, utilizar encontrar que mirar hacia arriba en la lista y actualización. El problema es que no estoy seguro de cómo el método busca hallazgo. ¿Qué pasaría si cualquier cambio puede hacer método de pensar que es un objeto diferente completamente nuevo? (¿Cómo encontrar encontrar realmente?)

  3. Lo que hice fue añadir identificadores de entidades en el momento que están añadidos a la lista, para que pueda volver a ponerlos en su lugar después de la edición. El problema es que tengo método remove también, y estoy seguro de que iba a cambiar los índices, ya que si sería entonces tendría que hacer identificaciones de volver a actualizar cada vez que se quita una entidad. Me parece que bastante ineficiente. Así que sería List <>. Quita el cambio de los índices? (Supongo que lo haría)

Estas son en realidad 3 preguntas en una, y me aprecian respuesta en cualquiera de estos, por supuesto, las respuestas a las preguntas más altas serán más apreciadas!

Un pedazo de código para obtener idea de cómo funciona todo esto:

public class WorldManager
{
    List<Entity> Entities = new List<Entity>();
    List<Entity> ToAdd_Entities = new List<Entity>();
    List<Entity> ToRemove_Entities = new List<Entity>();
...
    public void Update()
    {
        for(int count = 0; count < ToAdd_Entities.Count; count++)
        {
            Entities.Add(ToAdd_Entities[count]);
            int index = Entities.IndexOf(ToAdd_Entities[count]);
            Entities[index].ID = index;

            ToAdd_Entities.Remove(ToAdd_Entities[count]);
        }

        for (int count = 0; count < ToRemove_Entities.Count; count++)
        {
            Entities.Remove(ToRemove_Entities[count]);
            ToAdd_Entities.Remove(ToAdd_Entities[count]);

            //index update is required here too, I just didn't implement it yet.
        }
    ...
   }
}

¿Cómo puedo acceder a ella:

List<Entity> bots = WorldManager.GetEntitiesByName("bot");
bots[1].Location = new Vector2(x,y);
WorldManager.UpdateEntities(bots);

No uso ese trozo de código, eso es sólo un ejemplo sencillo de mi idea.

Por favor, perdóname por mi confuso Inglés (si lo encuentra confuso), soy un serbio.

Gracias de antemano.

¿Fue útil?

Solución 2

Bueno, tengo respuesta en mi solución más alta! Lo tengo desde otra pregunta mía, y pensé que debía poner solución a este problema también.

La respuesta es que el tiempo que he añadido a la lista, que ya está vinculado, porque la Entidad es una clase y es objetos son "tipos de referencia", por lo que cuando les asigno a algún otro objeto, o una lista en este caso, están vinculados a la misma. Cualquier cambio que haga a ese objeto se actualiza automáticamente en el otro lado!

(Alguien me corrija si estoy equivocado. Voy a comprobar esto tan pronto como puse mi marco / motor a prueba, y le hará saber es esto "la" solución.)

Otros consejos

Sugiero a no ir con el "una enorme lista donde cada objeto se encuentra en" -enfoque. Más bien centrarse en la información, gráficos y otras cosas básicas en el motor, a continuación, dejar el resto del juego a clases específicas.

Imagina que tienes un mundo 2D con una gran cantidad de árboles en ella, todos son en su mayoría estáticos. Ahora usted tiene 5k de ellos sentado en su Lista de Entidades hacer absolutamente nada, en vez de ponerlos allí, en lugar de ellos debe poner en una lista en algún lugar de su clase de mapa, de esta manera son más fáciles de acceso (no lo hace tienen que pasar por toda la lista para encontrarlos) y el diseño para crear una mucho más limpio también. De esta manera usted no tiene que codificar toda una clase de código del controlador genérico, que al final todavía no se ajusta a todos los objetos posibles que podría lanzar a su mundo.

Así que los 3 consejos de mi lado son: - Sólo se permite código específico no juego en el motor (gráficos, sonido, de entrada) - Desde el motor sólo llamar 2 métodos en su juego, como por ejemplo, updateGame () y renderGame () que luego se encargue del resto - Y por último pero no menos importante:. Mantenga los componentes de su juego separados de los otros, sólo les permiten interactuar donde es realmente necesario

También es importante, construir algunos juegos, a continuación, busque qué código que realmente comparten y desde este código formar su motor.

Si quieres un ejemplo de cómo esto podría hacerse (aunque no lo hago garantía de que es perfecto) se puede echar un vistazo a mi pequeño motor aquí . Es Java y no es realmente bueno comentó, pero debe darle una idea básica sobre cómo estructurar su motor. Si usted quiere ver un juego que he construyo con el motor de echar un vistazo a la sección de descargas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top