Переменные, простые скрипты, функции rpg maker MV

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
8 года 3 нед. назад #103610 от yuryol

Lekste пишет: Разбивать теги по пробелу не лучшее решение - значения с пробелом обрежутся и будет каша.


в данном случае пробелов не будет, как и строковых данных, используются только цифры.

Я раньше пробелы вообще не использовал, отделял запятыми, но потом увидел у Пещерного и решил что для цифр почему бы и нет :blush:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
7 года 10 мес. назад #104494 от yuryol
Блокировка управления.
При переводе переключателя в положении false персонаж будет только поворачиваться в нужную сторону но не двигаться
Code:
var blockMove = Game_Player.prototype.moveStraight; Game_Player.prototype.moveStraight= function(d) { if (this.canPass(this.x, this.y, d)) { this._followers.updateMove(); } (blockMove) ? this.setDirection(d) : Game_Character.prototype.moveStraight.call(this, d); }

Очистка переменных
, где mainArr - массив который надо очистить.
Бывает необходимость очистить значения переменных или массивов после перехода на другую карту. Для этого мы можем очищать их в данной функции вместо того, чтобы на каждую новую карту вставлять автоматическое событие с очисткой переменных или массивов
Code:
var absYuryolTerminate = Scene_Map.prototype.terminate; Scene_Map.prototype.terminate = function() { absYuryolTerminate.call(this); mainArr= []; }

Удобный "консоль лог"
До меня только пару месяцев назад дошло, что в мв есть поддержка ES2015 (а с недавнего времени по словам ДК и ES2016, ES2017). А значит можно использовать удобные шаблонные строки с обратными кавычками. Теперь например вместо конкатенации с кучей плюсов и открытий/закрытий кавычек
Code:
console.log('Переменная 1 = ' + variables[1] + '. Переменная 2 = ' + variables[2])
удобнее писать и читабельнее читать:
Code:
console.log(`Переменная 1 = ${variables[1]}. Переменная 2 = ${variables[2]}`)
Спасибо сказали: NeKotZima

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
7 года 8 мес. назад #105433 от yuryol
Вдруг кто не знает: МВ браузерный, а потому можно использовать соответствующие команды, например:

Проверка нажатия любой из клавиш клавиатуры:
Code:
document.onkeydown = function(e){ alert(`Нажата клавиша: ${e.keyCode}`); // }

Проверка нажатия любой из клавиш мыши:
Code:
document.onmousedown = function(e){ alert(`Координата Х: ${e.clientX}, Координата Y: ${e.clientY}`); }
Спасибо сказали: Dmy, NeKotZima, Noxmils

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Поддержка Фонда Разработчик Проект месяца 3 место Учитель Оратор Даритель Стимкея 2 место За 2 место на конкурсе маппинга Программист Ruby Паладин
Больше
7 года 8 мес. назад - 7 года 8 мес. назад #105439 от Dmy
Спасибо за интересную тему и полезный код!

Этот текст уже не актуален
Последнее редактирование: 7 года 8 мес. назад пользователем Dmy.
Спасибо сказали: DK, yuryol, Noxmils

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
7 года 8 мес. назад #105443 от yuryol

Dmy пишет: Хотелось бы уточнить одну вещь.

Сейчас рекомендуют не использовать onXXX — вместо них лучше использовать addEventListener('XXX', ...). Это связано с тем, что onXXX могут существовать только в единственном экземпляре — когда мы присваиваем функцию document.onkeydown = function(e){ .... }, мы таким образом заменяем предыдущую функцию. Т.е. если два плагина будут использовать document.onkeydown одновременно, то код первого плагина не выполнится.


Спасибо! Обновил первый пост :blush:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
7 года 8 мес. назад #105444 от DK
Пора бы уже убирать код под спойлеры, а то пост большой получается
Спасибо сказали: yuryol

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
7 года 8 мес. назад #105445 от yuryol

DK пишет: Пора бы уже убирать код под спойлеры, а то пост большой получается


не,с ними неудобно. так сразу видишь код, можешь быстро его найти, понять то ли это искал, скопировать и вставить куда надо. А так придется тыкаться, раскрывать каждый спойлер.

это опять же на мой взгляд и дело удобства, но так как этой темой пользуюсь наверное в основном я, то пока оставлю как было, тем более в отличии от картинок много памяти он не ест :blush:
Спасибо сказали: Aiaz Marx

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
7 года 8 мес. назад #105482 от yuryol
Изменение параметра события на определенное время (изменение прозрачности, параметра наложения)
Code:
var paramTime= function(id, param, value1, value2, time) { $gameMap.event(id)[param] = value1; setTimeout(function() {$gameMap.event(id)[param] = value2;}, time); };

Вызов функции например для мигания события с ИД=10 на 70 миллисекунд:
Code:
paramTime(10, '_blendMode', 1, 0, 70);

Или например для повышения прозрачности события на столько же миллисекунд:
Code:
paramTime(10, '_opacity', 1, 0, 70);

Можно сделать анимацию с задержкой:
Code:
paramTime(10, '_animationId', 0, 1, 700);

Можно творить забавные вещи, например при вводе кода ниже событие "пойдет" сначала на клетку с координатами (10,1), а затем (10,3) Главное указать скорость побольше, чтобы событие успело до туда сбегать
Code:
paramTime(10, '_x', 10, 10, 700); paramTime(10, '_y', 1, 3, 700);

Взяв это на заметку, получаем своего рода простенький плагин "поиска пути" (кривой и без анимации ходьбы)
Code:
paramTime(10, '_x', $gameMap.event(10).x, 10, 700); paramTime(10, '_y', $gameMap.event(10).y, 3, 700);

Сначала указав событию идти на клетку выше, и буквально через мгновение (70 миллисекунд) приказав ему идти обратно, мы можем эмулировать прыжок на месте:
Code:
paramTime(10, '_x', $gameMap.event(10).x,$gameMap.event(10).x, 70); paramTime(10, '_y', $gameMap.event(10).y-1, $gameMap.event(10).y, 70);
Спасибо сказали: Aiaz Marx, NeKotZima, Noxmils

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
7 года 7 мес. назад #105728 от yuryol
TRUE STORY


Итак, вызов плагина для задания маршрута событию,герою:
Code:
$gameMap.moveEvent(id, direction, amount);

, где id - номер события (или 0, если нужен герой), direction - направление, amount - количество повторений (например шагов)

Сама функция:
Code:
Game_Map.prototype.moveEvent = function(id, direction, amount) { if (id) { var event = this.event(id); }else { var event = $gamePlayer; }; if (!event) return; var gc = Game_Character; var route = { list: [] }; var code; switch(direction){ case 0:{ code = gc.ROUTE_END; break; } case 2:{ code = gc.ROUTE_MOVE_DOWN; break; } case 4:{ code = gc.ROUTE_MOVE_LEFT; break; } case 6:{ code = gc.ROUTE_MOVE_RIGHT; break; } case 8:{ code = gc.ROUTE_MOVE_UP; break; } case 12:{ code = gc.ROUTE_MOVE_FORWARD; break; } } for(var i = 0; code && i < amount; i++){ route.list[i] = { code: code }; } route.list[amount] = {code: gc.ROUTE_END}; //Yuryol route.skippable = true; //Yuryol event.forceMoveRoute(route); };
Спасибо сказали: Dmy, DK, VarVarKa

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
7 года 7 мес. назад #105730 от DK
Какой ужасный код я писал несколько лет назад :)
Спасибо сказали: yuryol

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
7 года 7 мес. назад #105859 от yuryol
Возможность события с приоритетом "под персонажем" или "над персонажем" проходить сквозь другое событие.

Когда еще был на эйсе не очень понимал, почему сделано так, что например событие птица не может пролететь над лошадью.
Случай с приоритетом "Под персонажем" более понятный: те же двери в таком случае будут пропускать события "под персонажем". Но особой надобности ставить этот приоритет событию не особо вижу, кроме как дать другим событиям проходить над ним.
Code:
Game_CharacterBase.prototype.isCollidedWithCharacters = function(x, y) { if (this._priorityType==0 || this._priorityType==2) return false; return this.isCollidedWithEvents(x, y) || this.isCollidedWithVehicles(x, y); };

DK пишет: Какой ужасный код я писал несколько лет назад :)


Был бы рад узнать, как бы ты щас его написал =З

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
7 года 7 мес. назад - 7 года 7 мес. назад #105860 от DK
Ну, примерно так (хотя у всех свое представление об идеальном коде):
ВНИМАНИЕ: Спойлер!
Последнее редактирование: 7 года 7 мес. назад пользователем DK.
Спасибо сказали: yuryol, NeKotZima

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
7 года 7 мес. назад - 7 года 7 мес. назад #105861 от Lekste
Норм.
Также можно было сделать так:
Code:
let code = { switch (direction) { case 0: { return gc.ROUTE_END; break; } case 2: { return gc.ROUTE_MOVE_DOWN; break; } case 4: { return gc.ROUTE_MOVE_LEFT; break; } case 6: { return gc.ROUTE_MOVE_RIGHT; break; } case 8: { return gc.ROUTE_MOVE_UP; break; } case 12: { return gc.ROUTE_MOVE_FORWARD; break; } default: { return undefined; break; } } } () if (code === undefined) { console.warn(`Unknown direction: ${direction}`); return; }

Чтоб, в случае чего, было проще поменять переменную только в одном месте и warn не писать в нескольких местах, если добавится еще случаев, когда направление не определено.

А еще лучше, switch убрать в отдельную функцию.
Последнее редактирование: 7 года 7 мес. назад пользователем Lekste.
Спасибо сказали: yuryol

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
7 года 7 мес. назад #105864 от DK
По мне такой вариант хуже читается
Спасибо сказали: Dmy

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Оратор 1 место в Готв 3 место Готв 2 место Учитель Композитор Победитель конкурса Организатор конкурсов
Больше
7 года 7 мес. назад #105882 от yuryol
два вопроса:

1) почему вы все пишите "if (code === undefined)", а не "(!code)"?

2) почему, Лексте, в "default" присваиваешь "undefined"?

во-первых, "code" и так будет "undefined", если оно не будет равно ни одному из значений свича
во-вторых, "undefined" - это по сути значение которое еще не задано, свойство которого нет и т.д. А тут ты намеренно задаешь значнеие, поэтому имхо надо приравнивать к "null". даже есть фраза " JavaScript использует undefined, а программисты должны использовать null"

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
7 года 7 мес. назад #105890 от DK
1) я не знаю значения констант из gc. Одна из них может равняться 0 и тогда (!code) сработает, что будет неправильно. Можешь также использовать (code == null) для сравнения с undefined и null

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
7 года 7 мес. назад #105900 от Lekste
2) Присваиваю undefined, чтоб было ближе к оригинальному варианту от DK, а из функции надо что-то вернуть.
А так, да, null надо использовать
Может в варианте с анонимной функцией и хуже читабельность, но от выноса свитча в отдельную функцию будет точно лучше.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Поддержка Фонда Разработчик Проект месяца 3 место Учитель Оратор Даритель Стимкея 2 место За 2 место на конкурсе маппинга Программист Ruby Паладин
Больше
7 года 7 мес. назад - 7 года 7 мес. назад #105901 от Dmy

Lekste пишет: Может в варианте с анонимной функцией и хуже читабельность, но от выноса свитча в отдельную функцию будет точно лучше.

Так это анонимная функция!.. :unsure: Никогда таких не видел. :silly:

Там в let code = { ... }() точно (() => ...) не пропущено? Или это какой-то сверхновый синтаксис?
Последнее редактирование: 7 года 7 мес. назад пользователем Dmy.
Спасибо сказали: Lekste, yuryol

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
7 года 7 мес. назад #105904 от DK
Скорее всего пропущено.
Вынести switch было бы очень хорошо в отдельную функцию, соглашусь.
Но если не выносить то...
1. Код сложнее понять (Dmy даже не сразу понял, что это анонимная функция),
2. Выделять память на анонимную функцию и тратить время на вызов этой функции, в то время, когда в моем случае всего лишь маленький свитч.
Зачем так усложнять все - непонятно.
Но опять же все варианты рабочие (даже самый первый :))
Спасибо сказали: Lekste, yuryol

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
7 года 7 мес. назад #105922 от Lekste
Ага, пропустил, спасибо. Я уж не помню, как там что правильно пишется.
Кому понадобится - нагуглит. :)

Затраты незначительные. Пример был как переходный от свитча к отдельной функции, типа группируем фрагмент в логический блок.
Спасибо сказали: DK, yuryol

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.163 секунд
Работает на Kunena форум