Разделитель, выбор названия и прочие мелочи

Добавлен , опубликован
Итак, очередное обновление, в котором вы можете наблюдать новое здание - Разделитель. Кроме того, вы можете узнать первое название игры, пока рабочее, но перспективное, а также узнать о прочих мелочах, имевших место во время разработки.

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

Технические подробности

Решенные проблемы

  • Именно об этом баге я упоминал в последнем пункте описания нововведений. Вот в чем полагалась суть бага. При повороте башни для луча рассчитывалось положение выходного луча, а также то, попал ли он в какой-то объект или нет. Сюда входила и ситуация, попадает ли луч на другую башню или нет. Раньше я как проверял - если в кого-то попал, значит, просчитать влияние на этот объект отдельной функцией (сюда входило обновление информации о питающем луче башни, в которую луч непосредственно попадал), если не попал - проверяем, питал ли он перед этим какую-то башню, и если питал, то сделать так, чтобы он ее не питал. На деле же оказалось, что такое условие пропускает ситуацию, когда луч перескакивает с одной башни на другую. В итоге, если луч попадал с одной башни на другую, срабатывало условие "луч в кого-то попал", и этот луч все равно считался питающим для первой башни, пусть уже и не попадал в нее. Когда же, после длительного дебага я понял в чем проблема, она была решена довольно просто. Вместо связки "если-иначе" теперь используются два условия "если". Первое срабатывает, если луч ни с чем не столкнулся, или же столкнулся с объектом, не являющимся башней, которую он питал, и таком случае, в этой башни обнуляется питающий луч. А вот уже второе проверяет непосредственно сам объект, с которым столкнулся луч, и запускает влияние на этот объект.
Больше багов, по сути, нет. Проблемы же нерешенные пока не изменились, поэтому их я писать не буду.

Лирическое отступление

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

Ну что же, теперь я буду приниматься за следующую башню, которая будет соединять несколько лучей в один. А пока жду ваших отзывов.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
20
11 лет назад
0
Мне кажется модель разделителя надо поменять немного, а то они очень похожи (на видео) на призму, ведь в игре вид сверху
0
29
11 лет назад
0
на счет лирики, опыт в правильном проектировании приходит только с опытом. Тем более у тебя же уже были концепты башен, ты мог сразу увидеть проблему и правильно спроектировать, так чтобы это было минимально затратно
0
37
11 лет назад
0
почему вот у тех других мелких башенок угол преломления какой-то упоротый и не зависит от угла падения?
0
26
11 лет назад
0
ScorpioT1000, я где-то писал, что уже при продумывании концепта просто забил на законы оптики. Луч всегда выходит из передней части башни, и строго вперед, независимо от угла падения питающего луча. Внесение же поправки на угол падения внесет хаос в расположение лучей в игре, так как, помимо того, чтобы корректно повернуть башню, нужно будет еще и подобрать хороший угол падения питающего луча, а это в несколько раз увеличит количество кликов. Так что текущее положение пусть и нелогично с точки зрения оптики, но куда более оптимизировано для игровой механики.
Karp1989, основным различием является, во первых, весьма различимый радиус, во вторых, думаю, все таки будут заметны пластины сбоку Разделителя, во третьих, основной корпус Разделителя куда меньше по высоте, чем у призмы, что, как по мне, тоже весьма заметно по видео. Ну и свечение внутри разделителя, думаю, тоже будет заметно.
Щас для сравнения скрин сделаю
0
37
11 лет назад
0
это же менее интересно и более казуально =)
0
26
11 лет назад
0
ScorpioT1000, ну, максимально, что у могу сделать (и планирую, между прочим), это, во первых, сделать автоматическое наведение на центр башни (если приказ повернуться подразумевает, что конечная позиция луча будет пересекаться с другой башней, то луч поворачивается дополнительно, чтобы быть направленным именно на центр этой другой башни, и во вторых, сделать "мертвую зону" угла падения, то есть, если луч попадает в точку, откуда у башни должен выходить ее луч, то она луч не выпускает.
Да и вообще, это ТД, а этот жанр не особо подчиняется законам логики.
0
37
11 лет назад
0
Что тут такого сложного, не пойму, чем ближе луч к центру, тем меньше угол отражения
хотя я так понял это башня преломления, тогда чем ближе к центру, тем больше угол
можно даже 2 разных башни сделать - башня отражения и башня преломления, это же самое интересное - законы оптики
0
26
11 лет назад
0
ScorpioT1000, эта башня, в принципе, просто перенаправляет луч по необходимому направлению. Если тебе от этого станет легче, можешь считать, что там внутри есть особая оптическая система, которая направляет любой полученный луч именно по направлению башни.
0
37
11 лет назад
0
ну в общем, я так понял что тебе влом над этим работать =)
0
26
11 лет назад
0
ScorpioT1000, дотошность - это не мое)) Тем более, мне еще минимум над двумя башнями работать.
0
29
11 лет назад
0
ScorpioT1000, lentinant, там система, которая автоматически поворачивает нужные линзы, призмы, зеркала и прочии оптические штучки, так как надо.
0
37
11 лет назад
0
alexprey, суть чтобы юзер сам головой подумал как лучше)
0
26
11 лет назад
0
ScorpioT1000, думаю, когда будут переть толпы монстров, и ему нужно будет корректно расставить углы лучей, ему будет не до погрешности на угол преломления.
1
34
11 лет назад
1
Идея лучей мне лично очень интересна. Я даже как то хотел сделать карту в sc2 по этой тематики. Суть было в многократных (до 32х раз) отражениях луча от поверхностей. Сами поверхности что-то вроде зеркал, а луч является энергией. Суть была что бы аккуратно применять луч (не допустив того что бы он попал в героя, иначе теряются хелзы) но при попадании по разным энерго элементов он способен открывать проходы, убивать врагов и решать прочие задачи.
Даже пришлось написать оптимизированную библиотеку лучей xgm.ru/p/sc2/lightning-galaxy
Правда на этой идеи все и кончилось )
0
26
11 лет назад
0
Hellcore, ну, мне почему-то показалось, что сделать на этой основе ТД будет хорошей идеей. Насчет аккуратности - есть идея сделать расширенные настройки сложности, в которых, в том числе, была бы возможность включить урон по собственным зданиям, если луч попадает в "мертвую зону" (часть боковой поверхности башни, на которой нет принимающих элементов).

Уже готов сумматор, но для демонстрации его функционала лучше всего использовать не тестовые лучи, а источники частиц, с которыми я пока не разобрался. Так что, думаю, новость будет уже совмещена с усилителем.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.