Кто хорошо знает Lua?
Можно ли как-то сократить такое длинное слово как function?
В Tic-80 и Pico-8 это очень актуально, ибо очень большое ограничение символов.
1) Было бы неплохо, если бы можно было бы писать так код:
func HelloWorld ()
print («Hello World!»)
end
2) Ещё одна вещь которая раздражает в Lua, это то что нельзя сделать вот так с goto:
goto «name»
print (1)
::name::
print (2)
- 10 сентября 2019, 07:55
- 00
зачем тебе godot если есть switch? или нет? или есть? lua ведь хорош еще использованием метатаблиц:
только это обычная таблица, а не метатаблица
ага. только потом можно вызвать таблицу как функцию и все, предварительно описав ее конечно же.
А подробнее можно? Пока не похоже на метатаблицы.
Да это ясно, но это не метатаблица. Это просто использование гибкости таблиц в луа) Метатаблица, грубо говоря, указывает что делать с таблицей, когда мы пытаемся применить к ней какую-то "нестандартную" операцию, непредусмотренную для таблицы - типа сложения, и так далее. То есть если мы пытаемся применить к таблице какую-то "особую" операцию, то программа полезет в ее метатаблицу, чтобы посмотреть что делать-то.
а как вызывать такое?
тут же можно кучу условий написать внутри функций, которые находятся в таблице,
включая функции оттуда же в другие комнаты?
Ну, подозреваю, что как-то так
Ну а то, что я писал выше, может выглядеть так:
На выходе будет
Ну это просто пример, чтобы показать принцип. goto не особо нужно для такого. При желании можно сделать класс комнаты. Масса вариантов.
спасибо) прикольно, хотя наверное для 100-200 комнат это будет не очень
Сделать класс для комнаты (от него можно сделать класс для каких-то особых комнат), и от них наследовать уже. Или не наследовать, а делать экземпляры класса "Комната", для каждого прописывая функцию свою. Опять же, много вариантов. Но писать огромное ветвление с if-ами на 100-200 комнат тоже не особо здорово будет, если подумать.
Большое ветвление можно разбить на подфункции, и будет совершенно такой же алгоритм, что с виртуальными функциями, только без создания экземпляров. :)
Если мне надо поделить игру на локации или комнаты, я делаю так:
На диске одна папка с именем комнаты содержит скрипт с кодом этой комнаты и все используемые в ней ресурсы.
Этот скриптовой файл - содержит один список комнаты. Внутри списка - все переменные, все объекты, функции, в т. ч. функции рисования и обновления, все что сейчас находится в этой комнате и может меняться. По сути каждая комната - это отдельная "мини-игра". В основном скрипте level хранишь ссылку на список текущей комнаты и уже вызываешь ее обновление и рисование, функции входа в комнату и выхода из нее.
Если тебе надо сделать ветвление типа switch, то лучше сделать отдельный список где хранятся функции для кажого конкретного значения.
Это не подходит для Tic-80, но всё равно спасибо.
Там просто всего 1 скрипт в 65000 символов максимум и никаких отдельных папок.
Это фентези консоль по типу Pico-8.
Тогда и 200 комнат под вопросом в принципе. Хотя была полноценная РПГ на тик80, там чел написал виртуальную машину, интерпретирующую ассемблер или уже транслированный код (не помню точно), чтобы компактно написать много кода потом, у. Ссыль сейчас с телефона лень искать, но при желании можно. Но это скорее просто програмерский челенж такой.
https://medium.com/@btco_code/why-i-spent-almost-a-year-building-an-rpg-game-for-a-fantasy-console-2bbe2e1d8cb8
Нашел, нашел! Всё не совсем так, как я написал, но принцип схож почти что.
видел эту игру) почти TES) ну или ближе к старым играм типа Lands of Lore
Храни комнаты как массивы строк, где каждый символ будет означать определенный спрайт или объект.