Pull to refresh

Comments 11

Как очередной программист научился немного в алгоритмы и структуры данных. Жалко с автором здесь не подискутировать, а то кое к чему есть уточняющие вопросы. Когда я свою игру писал, кое-чем из списка активно пользовался, в частности, всерьез оптимизировал (по сравнению с "прототипом, который просто работает") логику выбора текущей цели для каждой башни, расставив на пути точки "вошел в радиус поражения" — "вышел из радиуса поражения", но у меня путь "рельсовый", а здесь, возможно, A* 2D с флуктуациями, ему такая оптимизация не подходит.


8. Кроме того, может не стоит делать уровни типа Endless Battle 2

ИМХО как раз стоит — нужны такие уровни, где движок проверяется на экстремальных параметрах, как раз для того, чтобы выявить проблему недостаточной оптимизации.

В Haxe хорошо то, что он полностью open source, то есть вы не заперты в чёрном ящике, который не можете исправить, как в случае с Unity. А бэкенд hxcpp предоставляет широкие возможности управления сборкой мусора непосредственно из API!

… и весь этот пафос только ради вызова cpp.vm.Gc.run? Как будто тут есть какое-то принципиальное отличие от GC.Collect! :-)

Реализация angleHelper просто убила… Да, он молодец, что добавил проверку на isNan, ну а убрать абсолютно ненужный цикл вообще?
И каким образом указанная конструкция из -724 ему сделает 4? Будет 356.
Не то чтобы он ненужный — но на обычный if его и правда можно заменить.
Это при том, что если посмотреть код коммита, у него там сперва вообще идёт округление Float-переменной
var angleHelper:Int = Math.floor(Value % 360)

> Не то чтобы он ненужный
Ага, давайте забудем что существует операция умножения и все задачи будем просто решать многократным повторением сложения
Ага, давайте забудем что существует операция умножения и все задачи будем просто решать многократным повторением сложения

А многократного и не будет: цикл никогда не выполняется более одного раза (за исключением прикола с округлением NaN до -2147483648)

-724 — 3 раза. Непонятно как считается этот угол, сколько у него объекты могут оборотов накручивать, может дойти и до десятки-сотни лишних итераций. Понятное дело, типа, «мелочи», но там-сям — вот и получаем дичайшие системные требования некоторого современного софта и игр, где программист боялся немного подумать и сэкономить.

Хотя, мне вообще смысл существования данных преобразований неясен. Все тригнометрические функции и так периодические.
Как-то вы неправильно считаете: (-724) % 360 = -4. И добавляться 360 в цикле будет именно к -4, а не к -724.
QuadTree стоило бы заменить на AABBTree. При правильном подходе AABBTree предоставляет впечатлительную производительность. Например, на ноуте с CoreI3 2.3 GHz на одном потоке 3к тел проверяет за 0.25 мсек при полном отсутствии движения, а если заставить все эти 3к двигаться, то за ~0.7 мсек формирует список пар. Но это 3 тысячи объектов, а не одна сотня.
На плоском поле фиксированного размера по-моему эффективней вообще без дерева обойтись, просто поделить поле на крупные клетки и индексировать объекты по ним.

Зависит от разряженности объектов. У них, судя по всему, из-за волн противников может оказаться очень много юнитов в одной клетке.

Sign up to leave a comment.

Articles