Написання програм на mJS (JavaScript)
Keira має вбудовану віртуальну машину mJS — легковісний рушій JavaScript, розроблений для мікроконтролерів. Це дозволяє писати та виконувати програми на JavaScript прямо з SD-картки, без необхідності компіляції чи перепрошивання Лілки.
Попередження
mJS підтримує підмножину ECMAScript (ES6). Деякі можливості повноцінного JavaScript (наприклад, class, async/await, import) не підтримуються. Детальніше: https://github.com/cesanta/mjs
Приклад програми
Модулі завантажуються автоматично — не потрібно писати жодних require(...) чи import. Ось приклад простої програми на mJS:
1// Заповнюємо екран чорним кольором
2display.fill_screen(display.color565(0, 0, 0));
3
4// Виводимо текст "Hello, world!" на екран
5display.set_cursor(0, 32);
6display.print("Hello, world!");
7display.queue_draw();
8
9// Чекаємо та завершуємо
10util.sleep(3);
Ви можете зберегти цей код у файл з розширенням .js на SD-картці, а потім виконати його, обравши його в браузері SD-картки.
Повний перелік доступних модулів та їх функцій можна знайти в розділі mJS API.
Відмінності від Lua API
Модулі mJS мають такий самий набір функцій та назви, як і Lua API, з деякими відмінностями:
Синтаксис: JavaScript замість Lua (
letзамістьlocal,//замість--, фігурні дужки замістьendтощо).Масиви: Починаються з індексу 0 (а не з 1, як у Lua).
Немає автоматичних колбеків: На відміну від Lua, де існують
lilka.init(),lilka.update()таlilka.draw(), у mJS скрипт виконується послідовно від початку до кінця. Для ігрового циклу використовуйтеwhileабоforз ручними викликамиdisplay.queue_draw()таcontroller.get_state().Модуль console: Замість
print()використовуйтеconsole.print().
Приклад ігрового циклу
1let running = true;
2
3while (running) {
4 // Зчитуємо стан кнопок
5 let state = controller.get_state();
6 if (state.a.just_pressed) {
7 running = false;
8 }
9
10 // Малюємо
11 display.fill_screen(colors.black);
12 display.set_cursor(0, 32);
13 display.print("Press A to exit");
14 display.queue_draw();
15
16 // Невелика затримка
17 util.sleep(0.016);
18}