Чтобы отвлечься от багов в релизной версии игры, решил описать вторую демонстрационную программу связки Lua + Delphi. В общем, запоздавшее описание вроде почти закончено и я лучше выложу его сейчас, чем буду кормить всех новыми обещаниями о доработке текста. Как говорится "меньше слов - больше дела", поэтому приступим! Начнем с основного вопроса: "Что же делает Демо-2"? Ответ прост - строит график зависимости скриптовой функции от времени. Опять же, если вы не понимаете о чем идет речь, то, вероятно, стоит прочесть сообщение, в котором я как-то раз обещал описать демки, что выложил на всеобщее обозрение. |
Начнем с того, что исходный код находится в папке Demo-2. Думаю, все уже скачано, открыто в Delphi и готово к "употреблению". На самом деле эта программа призвана только закрепить материал первой демо. Итак, сама программа строит график на экране. Все её достоинство в том, что зависимость f(t) задана с помощью скрипта.
Что вообще мы видим на форме? Вот такие элементы:
- TChart + TLineSeries
- Таймер
- Две кнопки: "Reload script" и "Clear"
- TMemo
Для чего все это? 1ый пункт - для отображения самого графика. Таймер - для того, чтобы график функции строился постепенно, у нас на глазах. Кнопка "Reload script" служит для перекомпиляции файла-скрипта. "Clear" - для очистки графика. Memo - для отображения различных лог-сообщений.При запуске программы происходит создание объекта fScriptManager класса TScriptManager. Затем выполняется инициализация скриптового менеджера, а также регистрируются три функции:
- Get_Time() - вызывается из скрипта для нахождения текущего времени
- Set_Result() - вызывается из скрипта, добавляя новую точку на график
- Add_ToLog() - вызывается из скрипта, добавляет строчку в Memo
В итоге вся суть программы заключается в загрузке скрипта с помощью вызова
fScriptManager.LoadScriptFile('demo_2.lua');
а далее по таймеру происходят вызовы скриптовой функции main:
fScriptManager.DoScript('main', [], false);
Вот и все, предельно просто. Конечно, чтобы окончательно понять, как все привязано друг к другу - стоит посмотреть !!!исходные коды!!! Demo-2, сделав двойные клики по основным кнопкам, рассматривая строчки основных вызовов.
Исходя из всего вышесказанного, ясно, что псевдо-код скриптовой функции "main" выглядит совсем просто:
Set_Result( F(Get_Time()) )
А полный текст скриптового файла demo2.lua выглядит так:
function main()
local nowtime = Get_Time();
Set_Result(math.sin(nowtime));
end;
то есть в качестве функции F здесь реализован обычный синус... В чем бонус? В любой момент можно изменить файл demo2.lua, к примеру на:
function main()
local nowtime = Get_Time();
Set_Result(nowtime*nowtime);
end;
нажать в программе кнопку "Reload Script" и моментально увидеть изменения графика функции на параболическую зависимость.
или что-то вроде:
function main()
local nowtime = Get_Time();
if (nowtime > 5) then
Set_Result(nowtime*nowtime);
else
Set_Result(math.sin(nowtime));
end;
end;
да много чего еще можно придумать, таким образом достоинства на лицо! :)
Кстати! Недавно наткнулся на эту тему. Парень выложил свой модуль связки lua + Delphi, похожий на luabind, умеющий очень многое; начиная от бинда структур и массивов, и заканчивая определением классов, регистрацией колбэков и много чего еще, о чем я и сам не знаю. Сам модуль занимает порядка 10 тыс. строк, так что я только мельком пробежался - хорошая структура, замечательное форматирование, обильные комментарии. Даже прилагается doc-справка в 50ти страницах! На первый взгляд - замечательная вещь! Нужно будет опробовать!
Вот и всё... всем удачи!
Ссылка на вступление к демонстрационным программам о lua.
Ссылка на описание первой демо.
0 коммент.:
Отправить комментарий