Добавлен lentinant,
опубликован
Итак, очередное обновление, в котором вы можете наблюдать новое здание - Разделитель. Кроме того, вы можете узнать первое название игры, пока рабочее, но перспективное, а также узнать о прочих мелочах, имевших место во время разработки.
Начнем непосредственно с видеодемонстрации.
Теперь по пунктам:
- Добавлен Разделитель - здание, делящее луч на два (после апгреда - три) луча, деля интенсивность изначального луча между ними. Лучи всегда под одинаковым углом (иначе реализация сильно бы осложнилась).
- Игре наконец-то подобрано название. Оно еще не окончательное, но шанс, что к концу разработки оно поменяется, очень мал. Отныне игра носит название Refraction. Прошу любить и жаловать.
- Появилась возможность приближать и отдалять камеру. При чем, чувствительность перемещения камеры меняется непосредственно с расстоянием.
- Заменен интерфейс, правда, теперь он состоит из одного курсора и отладочного текста. Тем не менее, именно к нему я буду лепить необходимые элементы.
- Значительно переработан базовый код башен, в ходе чего устранен серьезный баг, не замеченный мною ранее.
Технические подробности
Решенные проблемы
- Именно об этом баге я упоминал в последнем пункте описания нововведений. Вот в чем полагалась суть бага. При повороте башни для луча рассчитывалось положение выходного луча, а также то, попал ли он в какой-то объект или нет. Сюда входила и ситуация, попадает ли луч на другую башню или нет. Раньше я как проверял - если в кого-то попал, значит, просчитать влияние на этот объект отдельной функцией (сюда входило обновление информации о питающем луче башни, в которую луч непосредственно попадал), если не попал - проверяем, питал ли он перед этим какую-то башню, и если питал, то сделать так, чтобы он ее не питал. На деле же оказалось, что такое условие пропускает ситуацию, когда луч перескакивает с одной башни на другую. В итоге, если луч попадал с одной башни на другую, срабатывало условие "луч в кого-то попал", и этот луч все равно считался питающим для первой башни, пусть уже и не попадал в нее. Когда же, после длительного дебага я понял в чем проблема, она была решена довольно просто. Вместо связки "если-иначе" теперь используются два условия "если". Первое срабатывает, если луч ни с чем не столкнулся, или же столкнулся с объектом, не являющимся башней, которую он питал, и таком случае, в этой башни обнуляется питающий луч. А вот уже второе проверяет непосредственно сам объект, с которым столкнулся луч, и запускает влияние на этот объект.
Больше багов, по сути, нет. Проблемы же нерешенные пока не изменились, поэтому их я писать не буду.
Лирическое отступление
Небольшой совет для программистов игр, да и вообще для программистов. Никогда не ориентируйте свой код на одну задачу. Иначе рискуете делать куда больше работы, чем нужно.
Вот на моем примере. Базовые функции башни - добавление, удаление, просчет столкновения луча - были рассчитаны исключительно на переменную выходного луча, которая, по идее, есть во всех башнях. В итоге, когда речь зашла о Разделителе, который по определению должен работать с несколькими выходными лучами, эта одиночная переменная оказалась ни к чему, и мне пришлось бы для конкретно этого здания переписывать уже существующий код с учетом трех лучей. Но вместо этого, я просто поменял код базовой башни, заставив большинство функций принимать параметры вместо доступа к глобальной переменной. В итоге, код Разделителя состоит из функции расчета выходных лучей (которая, по сути, индивидуальная для каждой башни, ибо именно она играет определяющую роль), и перегруженной функции обновления положения лучей, в которой вместо одного вызова функции просчета луча, эта функция вызывается трижды. Также переработка кода, думаю, серьезно облегчит мне работу над следующей башней.
Ну что же, теперь я буду приниматься за следующую башню, которая будет соединять несколько лучей в один. А пока жду ваших отзывов.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Karp1989, основным различием является, во первых, весьма различимый радиус, во вторых, думаю, все таки будут заметны пластины сбоку Разделителя, во третьих, основной корпус Разделителя куда меньше по высоте, чем у призмы, что, как по мне, тоже весьма заметно по видео. Ну и свечение внутри разделителя, думаю, тоже будет заметно.
Щас для сравнения скрин сделаю
Да и вообще, это ТД, а этот жанр не особо подчиняется законам логики.
можно даже 2 разных башни сделать - башня отражения и башня преломления, это же самое интересное - законы оптики
Правда на этой идеи все и кончилось )