Una de las reglas más importantes en gamedev es optimizar los juegos de tus algoritmos explotando todas las restricciones posibles que tu juego define: esta es la razón principal por la que no ves juegos tremendamente diferentes construidos encima de cualquier motor de juegos de las empresas, han explotado sus limitaciones de manera tan eficiente que no pueden hacer frente a nada que no esté dentro de estas limitaciones.
Dicho esto, dijiste que las unidades se mueven en línea recta - y dices que los jugadores pueden 3000 unidades - incluso si supongo que son 3000 unidades para ocho jugadores, eso es 375 unidades por jugador, entonces creo que estoy a salvo en asumiendo que en cada paso del juego (y supongo que cada paso involucra el cálculo que describes arriba) que más unidades no cambiarán su dirección que las unidades que cambiarán de dirección.
Por lo tanto, si esto es cierto, entonces quiere dividir todas sus piezas en dos grupos: las que cambiaron de dirección en el último paso y las que no lo hicieron.
Para los que sí lo hicieron, necesita un poco de calibración: para unidades de dos fuerzas opuestas, querrá preguntar: ¿cuándo verá la unidad A la unidad B, dado que ni la unidad A ni la unidad B cambian de dirección o velocidad? ? (puede tratar con aceleración/desaceleración, pero luego se vuelve más complicado) - para calcular esto, primero debe determinar si los vectores que la unidad A y la unidad B están viajando intersectarán (cálculo de intersección de línea 2D simple, combinado con un cálculo que le dice cuándo cada unidad llega a esta intersección) - si no lo hacen, y no pueden verse ahora, entonces nunca se verán a menos que al menos uno de ellos cambie de dirección. Si se cruzan, entonces necesitas calcular la diferencia de tiempo entre cuando la primera y la segunda unidad pasan por el punto de intersección; si esta distancia es mayor que el rango LOS, entonces estas unidades nunca se verán a menos que uno cambie de dirección. si este diferencial es menor que el rango LOS, entonces unos pocos cálculos más (agite las manos vigorosamente) le indicarán cuando tenga lugar este evento bendecido.
Ahora, lo que tiene es una colección de información bifurcada en elementos que nunca se verán y elementos que se verán en algún momento t en el futuro - cada paso, simplemente trata con las unidades que han cambiado dirección y calcular sus interacciones con el resto de las unidades. (Ah, y trate con esas unidades que los cálculos previos le dijeron que se verían entre sí, recuerde mantenerlas en una estructura ordenada insertable) Lo que ha hecho efectivamente es explotar el comportamiento lineal del sistema para cambiar su pregunta de 'no unidad de ver la unidad B' a 'Cuando la unidad voluntad a ver la unidad B'
Ahora, todo esto dicho, esto no es para descontar el espacio respuesta estructura de datos - es una buena respuesta - sin embargo, también es capaz de tratar con unidades en movimiento aleatorio, por lo que debe considerar cómo optimizar aún más este proceso; también debe tener cuidado al tratar con la visibilidad entre regiones, es decir, las unidades en los bordes de dos regiones diferentes pueden ser capaz de verse, si tienes piezas que tienden a agruparse, cantar una estructura de datos espaciales con dimensiones variables podría ser la respuesta, donde las piezas que no están en la misma región tienen la garantía de no poder verse entre sí.
Recomiendo también pedir esto en http://gamedev.stackexchange.com/, si usted no lo ha hecho ya – cHao
3000/8 = 375, en SC2 puedes tener un máximo de 200 alimentos, ¡y podrás macro 375 unidades correctamente! :) –
Ohkay, RTS = Estrategia en tiempo real! – Lazer