Сумматор и усилитель

Добавлен , опубликован
Итак, товарищи, после длительного перерыва, я наконец-то готов сделать отчет об проделанной работе.

По традиции, начинаю демонстрационным роликом.
Теперь по пунктам:
  • Добавлены две последние запланированные башни - Сумматор и Усилитель. Последний работает только при определенном угле падения входящего луча. По идее, он должен быть двухсторонним, но с этим я пока не разобрался.
  • Наконец-то я разобрался с системами частиц, и, как вы можете видеть, лазеры выглядят несколько лучше, чем раньше. В частности, интенсивность луча влияет на его толщину.
  • Узнав, как работать с лучами, я решил сразу же добавить новый луч, для прицеливания, тут он отображается в виде анимированных стрелочек. При приказе вращаться, лазерный луч стремится занять позицию именно этого луча. При этом, если прицельный луч наведен на другую башню, то он "прилипает" к ее центру. В итоге, лазерный луч, в большинстве случаев, попадает именно на центр башни (так выглядит лучше).
  • Как видите, я начал помаленьку подбирать текстуры к моделям. Но поскольку развертка все еще кривая, это выливается в резкие переходы цвета (особо ярко это видно на сумматоре). Так что, этот аспект (впрочем, как и, вероятней всего, сами модели) будет еще перерабатываться.
  • Добавлен крохотный интерфейс. Можно заметить, что вращение перемещено на соответственную кнопку (а для Усилителя есть кнопка, поворачивающая его на угол, при котором он будет работать). Впрочем, это временная мера, так как, во первых, вероятней всего, я продублирую весь главный функционал на хоткеях, а во вторых, как только я разберусь с Флешем, кнопки станут круглыми, с картинками, и будут отображаться на выделенной башне.

Технические подробности
Не считая бесконечных фиксов вылетов в связи с зацикливанием функций, таковых почти нет.

О динамических массивах

Если в разделителе для работы с выходными лучами я могу спокойно работать с простым массивом, то в сумматоре, где количество входящих лучей может варьироваться от нуля до определенного числа (у меня - пять), подойдет только динамический. Раньше я уже работал с ними, при создании системы эффектов, и сейчас, работая над удалением элементов с массива, понял, насколько я протупил раньше. Дело в том, что мне не важен порядок элементов в массиве, важно только, чтобы не было пустых элементов, то есть, при каждом удалении элемента нужно было перераспределять переменные в массиве. Раньше я это делал циклом, который назначал на пустое место следующую после него переменную, на ее место следующую относительно ее, и т.д., ну и в конце урезал длину массива. Теперь я понял, что для массивов, в которых не важен порядок элементов, можно просто назначать пустому месту значение последнего элемента и уменьшать длину. Ну и в качестве поиска необходимого элемента в массиве, вместо цикла, можно просто использовать встроенную функцию.

Лучше прятать, чем удалять

Еще один момент, посвященный оптимизации. Раньше я удалял выходные лучи, когда не было входящего. Что оставляло много мусора. Конечно, он убирается специальной особенностью движка, но в игре, где было бы много башен, и лучи постоянно менялись бы, это может привести к упадку производительности (ну а вдруг). Теперь я понял, что лучи удалять совсем не обязательно, достаточно просто их прятать. Конечно, понадобились некоторые переработки, например, чтобы невидимый луч не мог стать входящим для другой башни, но это все уже пофиксено. В общем, запомните - если вы часто используете однотипный элемент, то будет проще его прятать и показывать, а не удалять и создавать заново.

На этом пока все. Решу, что делать с Усилителем, и приступлю к созданию Рабочего. Тут уже будет трудней - анимация, и все такое. Но до создания основного геймплея, мне нужно создать систему постройки зданий, а для этого нужны соответственные юниты.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
11 лет назад
0
О динамических массивах
Хочешь сказать в стандартной либе нету ArrayList/Vector?
2
26
11 лет назад
2
Doc, а можно не жававскими терминами?
2
29
11 лет назад
Отредактирован Doc
2
Array List - не жавовский термин. Vector по идее тоже. Хотя конечно большинство ссылок в гугле будут вести именно на статьи по жаве.
2
26
11 лет назад
2
Да, нашел одну функцию для вырезания куска массива, но что там, что в моем методе, нужно юзать две строчки.
Doc, если под Array List ты имеешь ввиду список, то нет, его тут нет. А Вектор в UnrealScript - вообще структура.
0
29
11 лет назад
0
Если нет, тогда это очень печальная стандарт либа.
2
26
11 лет назад
Отредактирован lentinant
2
Doc, блин, не путай меня ссылками. Динамические массивы в либе есть. udn.epicgames.com/Three/UnrealScriptVariables.html Что же конкретно подразумеваешь ты, я не знаю (я ламер, мне не дано).
3
34
11 лет назад
3
Есть же листы. У них всего две функции pop и push. это как раз то что нужно для хранения таких динамических данных.
0
29
11 лет назад
0
Тут суть в том, что list должен быть плотным, т.е. в нем по определению не может быть пустых ячеек.
2
26
11 лет назад
Отредактирован lentinant
2
Doc, Hellcore, динамические массивы там есть, листов нет, все. Впрочем, я еще посмотрю некоторые функции, связанные с динамическими массивами, может быть, там есть этот функционал.
Я так понял, о самой наработке никто и слова не скажет. А то прицепились все к массивам, блин. С такими темпами я технический блок нафиг выпилю.
0
29
11 лет назад
0
Ну пока что все еще особо не на что смотреть.
Мне вот интересно как обрабатывается в конце луч из разделителя попадающий в сумматор.
А еще, имхо, повороты уж очень медленные.
2
26
11 лет назад
2
Doc, в луче есть еще один массив, обозначающий, через какие сумматоры он прошел. Передается из входящего луча во все выходящие (или со всех входящих в выходящий). Если сумматор найдет в этом массиве себя, этот луч просто не учитывается как входящий.
Скорость поворота я буду еще подбирать. К слову, это задумывалось в качестве апгрейда.
Этот комментарий удален
Чтобы оставить комментарий, пожалуйста, войдите на сайт.