Comments 7
Тут, скорее, не разобрали, а написали и чуть-чуть описали — какой кусок кода что делает. В коде ни единого комментария. У людей, не знающих ни LÖVE, ни Lua, некоторые куски кода вызовут одно лишь непонимание и скорее всего, приведут к копипасту. Лично я так первое время и делал, когда читал статьи, а потом уже знающие знакомые и более подробные статьи смогли рассказать — почему именно так, а не иначе. Если же статья ориентирована на умеющих работать с данным движком, тогда все слишком просто.
Не лучше ли было бы описать подробнее некоторые элементы и добавить комментариев?
Совет про разбор отдельных интересных элементов игры вместо поверхностного описания всей игры — отличный, спасибо, как раз о чём я и думал для следующего раза.
Удачи вам в разработках и последующих статьях, с интересом почитаю ещё.
Вцелом вроде норм. Есть, конечно, что доделывать, но начало положено.
Из "отзывов, комментариев, подсказок" есть следующее:
1) Нижняя граница для захватчиков проходит как-то неочевидно.
Есть ожидание, что для потери жизни они должны либо столкнуться с игроком, либо
дойти до нижней границы экрана. Сейчас же жизнь теряется, пока они висят довольно высоко.
Лучше либо поменять, либо визуально обозначить этот предел.
2) Думаю, лучше делать какую-нибудь проверку на версию интерпретатора.
Вначале попытался запустить на love 0.9 (дебиановские репы небыстро обновляются).
Не работала стрельба.
Чинится дополнительной проверкой в love.keyreleased
: if key == 'space' or key == ' ' then .....
Также в love 0.9 пока пытался понять, как стрелять, нажал на 's'. Все упало с ошибкой:
Error: stats.lua:12: attempt to call field 'getStats' (a nil value)
stack traceback:
stats.lua:12: in function 'draw_debug'
stats.lua:58: in function 'draw'
main.lua:82: in function 'draw'
[string "boot.lua"]:437: in function <[string "boot.lua"]:399>
[C]: in function 'xpcall'
В love-0.10.2 и стрельба и статистика вроде работают нормально.
3) В обучалке про арканойд, на которую есть ссылка, столкновения сделаны далеко не идеально.
Проверка столкновений выполняется довольно часто, поэтому все лишние действия в ней — арифметические, создание промежуточных таблиц — лучше свести к минимуму. См. обсуждение.
Можно, конечно, сделать проверку версии на запуске и несколько вариаций поведения, подходящих под разные версии API, но такое решение может быть слишком избыточным, да и я пока ни разу такого не встречал. Обычно либо всё пишется под последнюю версию и время от времени обновляется, либо опять же, указывается требуемая для адекватной работы версия (в документации, описании, или всё том же conf.lua), либо код просто уже никем не поддерживается и приходится переделывать места с ошибками вручную. Благо, что такими являются только места, где идет обращение к устаревшим love.* функциям, но иногда и там бывают свои проблемы, из-за которых приходится переделывать часть логики.
2-3) Спасибо за ссылку, почитаю. И за «тест» на обратную совместимость) Надо будет найти пару предыдущих версий движка и на них проверять перед окончанием работ.
Делаем Space Invaders на Love2d и Lua