Одним из самых фундаментальных правил в gamedev является оптимизация bejeebers из ваших алгоритмов, используя все возможные ограничения, которые определяет ваш игровой процесс - это главная причина, по которой вы не видите дико разных игр, построенных поверх любого заданного компании, они использовали свои ограничения настолько эффективно, что не могут справиться с чем-либо, что не входит в эти ограничения.
Вы сказали, что единицы двигаются по прямой линии - и вы говорите, что игроки могут использовать 3000 единиц, даже если я предполагаю, что это 3000 единиц для восьми игроков, это 375 единиц на игрока, поэтому я думаю, что я в безопасности предполагая, что на каждом этапе игрового процесса (и я предполагаю, что каждый шаг включает в себя расчет, который вы описали выше) , что больше единиц не изменит их направление, чем единицы, которые изменят направление.
Итак, если это правда, то вы хотите разделить все свои части на две группы - те, которые изменили направление на последнем шаге, а те, которые этого не сделали.
Для тех, кто это сделал, вам нужно выполнить небольшую калибровку - для единиц любых двух противоборствующих сил вы хотите спросить: «Когда блок A увидит блок B, если ни один из блоков A или блок B не изменит направление или скорость ? (вы можете иметь дело с accelleration/decelleration, но тогда это становится более сложным). Чтобы вычислить это, вам нужно сначала определить, будут ли пересекаться векторы, на которых перемещаются блок A и блок B (простой расчет пересечения 2D-линии в сочетании с расчет, который сообщает вам, когда каждый блок попадает на этот перекресток) - если они этого не делают, и теперь они не могут видеть друг друга, то они никогда не увидят друг друга, если хотя бы одно из них не изменит направление. Если они пересекаются, то вам нужно рассчитать разницу во времени между тем, когда первый и второй единицы пройдут через точку пересечения - если это расстояние больше, чем диапазон LOS, то эти единицы никогда не будут видеть друг друга, если не изменить направление - если этот дифференциал меньше, чем диапазон LOS, то еще несколько (волновые руки энергично) подсчеты скажут вам , когда это благословенное событие.
Теперь у вас есть коллекция информации, раздвоенная в элементы, которые никогда не увидят друг друга и элементы, которые будут видеть друг друга в какое-то время t в будущем - каждый шаг, вы просто имеете дело с единицами, которые изменились направления и вычислить их взаимодействие с остальными подразделениями. (О, и иметь дело с теми единицами, которые в предыдущих расчетах сказали, что вы поймете друг друга - не забудьте сохранить их в вставляемой упорядоченной структуре). Фактически вы использовали линейное поведение системы для изменения вашего вопроса с «есть ли блока A см блока B», чтобы «Когда будет блок A см блока B»
Теперь все, что сказало, что это не обесценить пространственную структуру данных, ответ - это хороший ответ - однако он также способен обрабатывать блоки в случайном движении, поэтому вы хотите рассмотреть, как оптимизировать этот процесс дальше - вам также необходимо быть осторожным в отношении видимости поперечного региона, то есть единицы на границах двух разных регионов могут быть в состоянии видеть друг друга - если у вас есть кусочки, которые склонны к скоплению, u пение пространственной структуры данных с переменными измерениями может быть ответом, когда части, которые не находятся в одном регионе, гарантированно не смогут видеть друг друга.
Я рекомендую также просить это на http://gamedev.stackexchange.com/, если вы еще этого не сделали. – cHao
3000/8 = 375, в SC2 у вас может быть максимум 200 продуктов питания, которые смогут правильно настроить макрос 375 единиц! :) –
Ohkay, RTS = Стратегия в реальном времени! – Lazer