Новости

20.10.2023


Важно ставить запятые в нужном месте


Официально Roblox добрался до PS5 и PS4 чуть больше недели назад, а уже мелькает информация о том, что число загрузок перевалило за 10 миллионов. Бодро пошло.

Помимо непосредственно игры данная платформа Roblox предоставляет пользователям инструменты для их создания. А можно ли использовать её для изучения программирования? Всякие там переменные, массивы, циклы? И чтобы видеть, для чего всё это. Можно. Ведь тогда на вопрос, а чем это мы тут занимаемся, можно четко ответить - учусь. Но хочется программировать красиво, а для этого сначала пришлось слегка допилить платформу для более удобного использования. О чём это я? О livepreview - живом просмотре. Интересующиеся могут поставить геймпад на зарядку и слегка отдохнуть от игр вместе с небольшой юмористической зарисовкой. Не волнуйтесь, "кота не будетъ".

Загружаем и открываем Roblox Studio на ПК (нет, можно и на консоли стиком текст набивать, но на клавиатуре как-то сподручнее) и в меню видим знакомую кнопку F5, при нажатии на которую происходит запуск проекта на выполнение. Погодите, это что же, после каждой правки кода перезапускать проект? Нет, так дело не пойдёт. Бейсиком в детстве  наигрались. Хочется не как у группы Технология, а без нажатий на кнопку получить результат. В качестве языка программирования используется Lua. Не Питон, конечно, но выполнять код из строки тоже умеет методом loadstring.

Значит, делаем так: в проект добавляем текстовое поле ввода TextBox и при изменении текста в нём выполняем программный код. Как узнать, что он правильный? А как перестанут в консоль сыпаться сообщения "что ж ты пишешь-то", и персонаж по экрану начнёт бодро бегать. 

Добавляем текстовое поле в проект и смотрим, а что оно умеет. Клавиша Del не работает, выделение с шифтом - не работает, Home и End - не работают. И как редактировать текст, если это поле имеет функциональность 2004 года, когда только появился Roblox? Так никто и не предполагал, что его загрузят текстом. Так, кинуть пару слов в чат и достаточно. Это тот самый случай, когда порадовался бы функциональности простого блокнота Windows, который рекомендую использовать в каждом втором учебнике по HTML и Javascript. Хорошо, в каждом третьем. Но и этого нет. Значит, придётся самому дописать код.

Но это ещё пол-беды. Те, кто уже пытался писать клиентские и серверные скрипты в рассматриваемой среде (а это необходимо, поскольку клавиатурный ввод происходит на клиенте, а доступ к объектам - на сервере) знают о весьма любопытной фиче - задвоенного выполнения кода на сервере. Мы нажимаем на кнопку и вызываем серверный скрипт один раз, а он выполняется 2 раза. И никакими защелками, задержками и прочими заплатками эта проблема не решается. Ладно, сейчас поставлю внешний таймер для вытаскивания значения из переменной и посмотрим, что ты на это скажешь... О, нет! Реализация таймера на Lua в десяток строк кода - это слишком.

Официальный форум весь на ушах: "Алло-алло, парни, что делать-то? Двоится же". И тут появляется какой-нибудь умник, который пишет, а что здесь такого? Ну, выполняется серверный скрипт два раза, так и нет проблем. Ага. Тебе нужно создать один блок, а на голову падает два, нужно 4, а сыпется 8. Посмотрел бы я на такое веселье в Minecraft.

Катастрофа? Нет. Оказывается, вся проблема была в смене контекста выполнения серверного скрипта на Server. Если скрипт серверный, то логично же изменить его контекст выполнения на Server. Логично, но не в Roblox Studio. Отсюда вывод: сначала смотрим, как что-то работает на заводских настройках, а потом уже настраиваем по своему разумению.

О, вижу аудитория опустела. Видимо, геймпады подзарядились и все ушли играть. Раз так, то и код приводить не нужно, но для дочитавших оставлю небольшой бонус от канала ETA Prime - моддинг Рогалика для установки SSD 2280 при помощи Г-образного адаптера за 5-6 $.