- Сообщений: 1704
- Спасибо получено: 2735
Переменные, простые скрипты, функции rpg maker MV
Как известно, при указания в маршруте события движения "вперед", событие будет двигаться только туда, куда оно направлено. При этом команд "повернуться по-диагонали" нет, хотя движение по-диагонали задать можно.
Функция ниже исправляет этот недочет. Теперь можно задать событию "поворот по-диагонали" в маршруте движения через скриптовую команду:
или в другом событии через скриптовую команду:
После этого при указании в маршруте "вперед" событие будет двигаться по диагонали
Сама функция:
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
DK пишет: Зачем сохранил старую функцию, если не вызываешь ее в новой?
невнимательность мое всё
поправил
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Бывает, что после загрузки новой карты требуется сделать постоянно одно и тоже. Например, обнулять одни и те же переменные или проверять день или ночь в игре. Вместо того, чтоб на каждую новую карту вставлять автособытие, можно просто всё это добавить в скрипт:
Сейчас вспомнил еще один вариант - вставить ту строчку в "terminate". Этот вариант мне подсказал кто-то умный, поэтому наверное так будет правильнее
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Чтобы при увеличении окна игры или развороте ее на весь экран не было мыла, вставляем между тегов <head> и </head> в файл index.html в корневой папке игры следующую строчку:
Подсказал Dirge на нейтралке. Подойдет для пиксельных игр. Стоит учитывать, что шрифт также станет рендериться по другому, а потому лучше заменить его на более "квадратный", а в идеале опять же пиксельный.
Пример (слева с вставкой этой строчке, справа - с обычным рендерингом. Мыло справа видно невооруженным глазом):
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Ниже показана простая JS-функция, которая возвращает наибольшее из двух переданных ей чисел, или, если эти числа равны, значение false.
Code:function findGreatest(num1, num2) { if (num1 > num2) { return num1 } else if (num2 > num1){ return num2 } else { return false } }
Теперь напишем то же самое на Imba.Code:def findGreatest num1, num2 if num1 > num2 num1 elif num2 > num1 num2 else false
Затем, соответственно, автор указывает на преимущества Imba перед чистым JS:
- длинное слово "function",
- куча скобок,
- частое употребление return
То ли автор знает только основы синтаксиса JS, причем устаревшие, и не знает как переписать функцию с учетом его требований. То ли пытается ввести людей заблуждение (хотя делать это на хабре довольно глупо).
Чтобы подобных заблуждений о длине кода JS не было, давайте немного потренируемся в том, как сделать функцию проще, понятнее и читабельней
Сокращение кода
1. if...else
Давайте и начнем с вышеупомянутой функции и попробуем ее сократить:
1) Выражение в скобках состоят из одной строки, а потому мы их можем убрать:
2) Избавляемся от "else". Зачем они здесь, если return и так не дает пройти дальше?
3) Используем сокращенную запись конструкции if...else, тем самым оставив один return
4) Знак ">" выше по приоритету, чем "?", а потому мы можем опустить скобки
5) Перепишем ее как анонимную функцию, т.е. записав в переменную
6) Это позволит следующим шагом записать ее как стрелочную функцию, т.е. избавившись от длинного ненавидимого некоторыми программистами слова "function"
7) Еще одно преимущество стрелочной функции - возможность убрать return совсем, для чего мы должны написать функцию в круглых скобках
Чисто для справки - в круглых скобках мы можем писать не только одну строку. В ней мы можем написать и несколько строк, отделяя их запятыми, например можем добавить строчку "a = a/b".9) Читаемость конечно упадет, но для пары строк несильно. Если строк больше, можем перенести на несколько строк, как обычную функцию
Таким образом первоначальную функцию мы сократили до одной строки. Удобно ли для него это или нет - выбор автора, а выбора, как видим, немало. Лично мне нравится 2 вариант как самый читаемый и 7 - как самый короткий.
2. Switch
Одна из самых непривычных конструкций js. Многими считается устаревшей, кажется чужеродной, а постоянные вставки "break" бесят чуть ли не всех. Тем не менее в том же мейкере он часто используется для считывания направления персонажа. К примеру в этом посте используется подобная функция:
1) Мы конечно можем записать брейки в одну строчку, при этом читаемость упадет не сильно
2) Но можно вообще отказаться от свитча и использовать объект
3) А уже этот объект можем сразу возвращать
Для кого-то это может показаться непривычным, но по мне так подобный вариант не менее чужероден, чем switch
3. if ... else с объектами
В мейкере у игрока и событий похожие методы, а потому часто можно встретить подобную конструкцию
Давайте сократим подобную запись взяв как пример подобие функции из этого поста
которую мы вызываем, указывая третий параметр, если мы хотим изменить свойство у события
1) Перепишем функцию в краткую запись
2) Мы можем переписать выражение
Итог:
Чем хорошо JS? Тем, что синтаксис дает выбор писать так, как нравится. Можно писать в одну строчку, а можно топорно но читаемо. Можно через стандартные старые конструкции, а можно через функции. Это я еще не говорил о "new Function" , о котором можно почитать самостоятельно
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
1) Берем картинку в формате PNG с иконкой курсора (например можно скачать здесь )
2) Вставляем в корневую папку игры (там где находится файл index.html)
3) заходим в файл index.html через редактор кода или например блокнот, внутри тега "<head>" вставляем строчку:
где name - имя файла нашей иконки, без кавычек.
получится что-то типа
4) Радуемся! Теперь при наводке курсора в окно игры он меняется на закачанную нами картинку
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Вместо 'Hello, mukerist!' пишем текст который нам нужен (в кавычках)
Вместо '1.txt' пишем любое название файла,а затем через точку тип файла. В данном случае файл называет "1", и это текстовый файл. Файл будет находиться в корне игры
Зачем оно надо?
Например, для тестирования можно записать в файл значения всех переменных
Чтение из текстового файла
Затем можно например записать текст в переменную путем добавления в конце строчки
Зачем оно надо?
Можно, например, легко вставлять длинные тексты в игру, например отрывки из книг, записав в текст в переменную а потом написав "\V[1]" в сообщении мейкер
Интересно, что мейкер сам разобьет длинный текст на несколько сообщений а не будет обрезать и оставлять только первые строки, как это делает редактор
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Для теста своей АБС набросал простенькое логирование.
В try вставляем код своего плагина и при ошибке будет создан файл 'error.log', в котором будет ее описание с датой и временем. Время ставится отдельно для каждой ошибки, а дата - один раз в день.
На днях добавлю также отображение нужных переменных, переключателей, нужных мне свойств событий.
Вот так выглядит записи в логе (скрин из IDE Visual studio code):
Сам код:
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
yuryol пишет: Логирование
Для теста своей АБС набросал простенькое логирование.
В try вставляем код своего плагина и при ошибке будет создан файл 'error.log', в котором будет ее описание с датой и временем. Время ставится отдельно для каждой ошибки, а дата - один раз в день.
На днях добавлю также отображение нужных переменных, переключателей, нужных мне свойств событий.
Вот так выглядит записи в логе (скрин из IDE Visual studio code):
Сам код:
Code:try{ //ваш код } catch (err) { const name = 'error.log'; const fs = require('fs'); const data = new Date().toLocaleDateString(); const time = new Date().toLocaleTimeString(); let text; let content; const xhr = new XMLHttpRequest(); xhr.open("GET", name, false); try { xhr.send(null); } catch (err) { console.log(err); }; content = xhr.responseText; text = (!content || content && !content.includes(data)) ? `\n${data}\n ` : ''; text = `${text} \n ${time} \n ${err.stack} \n`; fs.appendFile(name, text, function(err) { if (err) throw err; }); }
у тебя на скрине 2 даты...
Предлагаю не маяться с try catch, а переопределить SceneManager.onError, как я сделал в DKTools:
Еще уточни, что запись в файл работает только на ПК.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
DK пишет: у тебя на скрине 2 даты...
Предлагаю не маяться с try catch, а переопределить SceneManager.onError, как я сделал в DKTools:
Code:const DKTools_SceneManager_onError = SceneManager.onError; SceneManager.onError = function(error) { DKTools_SceneManager_onError.call(this, error); DKTools.Utils.logError(error); };
Еще уточни, что запись в файл работает только на ПК.
про даты - точно,старый скрин вставил. потом исправил,все работает
за SceneManager.onError спасибо! поизучаю, пока не знаю чем лучше
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Сложение двух массивов:
1 способ - используем метод concat:
Сложение двух массивов с удалением дубликатов:
1 способ - используем методы concat, filter и indexOf:
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А почему не через includes ?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
DK пишет: 1 способ - используем методы concat, filter и indexOf:
А почему не через includes ?
да вообще добавлять не хотел,громоздко. хотя если со стрелочками то в принципе норм. добавил
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Во время разработки я пользовался пакетом Gulp, но на выходе получал все же один файл. Поэтому когда решил раскидать свой плагин боёвки на несколько файлов, чтобы пользователь мог выбирать - нужны ли ему разрушаемость тайлов, сложный худ-бар, собственное меню для АБС или пиксельное движение, то решил что все же лучше сделать плагин модульным не только на входе но и на выходе.
Export и import которые я использовал при создании приложений и сайтов, как оказалось, реализованы в браузерах не так как хотелось бы, поэтому вот небольшая
функция для подключения в плагин других файлов:
Сама функция:
Подключения файла YuryolTest.js при помощи нее
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Главное, чтоб у них не было общих глобальных переменных
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Lekste пишет: Неплохо. Как dll какие-то
Главное, чтоб у них не было общих глобальных переменных
спасибо!
ага, я в каждом из подобных файлов создаю класс с названием как у файла и вызываю его, чтобы этого избежать =З
типа:
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
DK пишет: А почему этот класс не сделать статическим?
а разве в жс можно делать классы статическими?
если ты про методы, то да, некоторые методы класса делаю статическими.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
