Войти на сайт

Авторизация, ждите ...
×
  • Страница:
  • 1
  • 2
  • 3
  • 4
  • 5

ТЕМА: Переменные, простые скрипты, функции rpg maker MV

Переменные, простые скрипты, функции rpg maker MV 5 года 11 мес. назад #103610

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
Lekste пишет:
Разбивать теги по пробелу не лучшее решение - значения с пробелом обрежутся и будет каша.

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

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

Переменные, простые скрипты, функции rpg maker MV 5 года 9 мес. назад #104494

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
Блокировка управления.
При переводе переключателя в положении false персонаж будет только поворачиваться в нужную сторону но не двигаться
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 - массив который надо очистить.
Бывает необходимость очистить значения переменных или массивов после перехода на другую карту. Для этого мы можем очищать их в данной функции вместо того, чтобы на каждую новую карту вставлять автоматическое событие с очисткой переменных или массивов
var absYuryolTerminate = Scene_Map.prototype.terminate;
Scene_Map.prototype.terminate = function() {
	absYuryolTerminate.call(this);
        mainArr= [];
}

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

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105433

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
Вдруг кто не знает: МВ браузерный, а потому можно использовать соответствующие команды, например:

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

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

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105439

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • За 2 место на конкурсе маппингаПоддержка ФондаПрограммист RubyРазработчикВетеранУчительОраторДаритель СтимкеяПаладин2 место
Спасибо за интересную тему и полезный код!

Этот текст уже не актуален [ Нажмите, чтобы развернуть ]
Последнее редактирование: 5 года 7 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, yuryol, Noxmils

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105443

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
Dmy пишет:
Хотелось бы уточнить одну вещь.

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

Спасибо! Обновил первый пост :blush:
Администратор запретил публиковать записи гостям.

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105444

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • УчительПрограммист RubyПроект месяца 2 местоПаладинПроект месяца 1 местоОраторРазработчик2 место Программист JavaScript Даритель Стимкея
Пора бы уже убирать код под спойлеры, а то пост большой получается
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105445

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
DK пишет:
Пора бы уже убирать код под спойлеры, а то пост большой получается

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

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

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105482

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
Изменение параметра события на определенное время (изменение прозрачности, параметра наложения)
var paramTime= function(id, param, value1, value2, time) {
    $gameMap.event(id)[param] = value1;
    setTimeout(function() {$gameMap.event(id)[param] = value2;}, time);
};

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

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

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

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

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

Сначала указав событию идти на клетку выше, и буквально через мгновение (70 миллисекунд) приказав ему идти обратно, мы можем эмулировать прыжок на месте:
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

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105728

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
TRUE STORY [ Нажмите, чтобы развернуть ]


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

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

Сама функция:
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

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105730

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • УчительПрограммист RubyПроект месяца 2 местоПаладинПроект месяца 1 местоОраторРазработчик2 место Программист JavaScript Даритель Стимкея
Какой ужасный код я писал несколько лет назад :)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105859

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
Возможность события с приоритетом "под персонажем" или "над персонажем" проходить сквозь другое событие.

Когда еще был на эйсе не очень понимал, почему сделано так, что например событие птица не может пролететь над лошадью.
Случай с приоритетом "Под персонажем" более понятный: те же двери в таком случае будут пропускать события "под персонажем". Но особой надобности ставить этот приоритет событию не особо вижу, кроме как дать другим событиям проходить над ним.
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 пишет:
Какой ужасный код я писал несколько лет назад :)

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

Переменные, простые скрипты, функции rpg maker MV 5 года 7 мес. назад #105860

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • УчительПрограммист RubyПроект месяца 2 местоПаладинПроект месяца 1 местоОраторРазработчик2 место Программист JavaScript Даритель Стимкея
Ну, примерно так (хотя у всех свое представление об идеальном коде):
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 5 года 7 мес. назад от DK.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol, NeKotZima

Переменные, простые скрипты, функции rpg maker MV 5 года 6 мес. назад #105861

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 911
  • Спасибо получено: 565
  • ОраторВетеранПрограммист RubyПрограммист JavaScript Даритель Стимкея
Норм.
Также можно было сделать так:
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 убрать в отдельную функцию.
Последнее редактирование: 5 года 6 мес. назад от Lekste.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Переменные, простые скрипты, функции rpg maker MV 5 года 6 мес. назад #105864

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • УчительПрограммист RubyПроект месяца 2 местоПаладинПроект месяца 1 местоОраторРазработчик2 место Программист JavaScript Даритель Стимкея
По мне такой вариант хуже читается
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy

Переменные, простые скрипты, функции rpg maker MV 5 года 6 мес. назад #105882

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1704
  • Спасибо получено: 2729
  • Композитор1 место в Готв2 место Оратор3 место ГотвПобедитель конкурсаОрганизатор конкурсовУчитель
два вопроса:

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

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

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

Переменные, простые скрипты, функции rpg maker MV 5 года 6 мес. назад #105890

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • УчительПрограммист RubyПроект месяца 2 местоПаладинПроект месяца 1 местоОраторРазработчик2 место Программист JavaScript Даритель Стимкея
1) я не знаю значения констант из gc. Одна из них может равняться 0 и тогда (!code) сработает, что будет неправильно. Можешь также использовать (code == null) для сравнения с undefined и null
Администратор запретил публиковать записи гостям.

Переменные, простые скрипты, функции rpg maker MV 5 года 6 мес. назад #105900

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

Переменные, простые скрипты, функции rpg maker MV 5 года 6 мес. назад #105901

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • За 2 место на конкурсе маппингаПоддержка ФондаПрограммист RubyРазработчикВетеранУчительОраторДаритель СтимкеяПаладин2 место
Lekste пишет:
Может в варианте с анонимной функцией и хуже читабельность, но от выноса свитча в отдельную функцию будет точно лучше.
Так это анонимная функция!.. :unsure: Никогда таких не видел. :silly:

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

Переменные, простые скрипты, функции rpg maker MV 5 года 6 мес. назад #105904

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

Переменные, простые скрипты, функции rpg maker MV 5 года 6 мес. назад #105922

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 911
  • Спасибо получено: 565
  • ОраторВетеранПрограммист RubyПрограммист JavaScript Даритель Стимкея
Ага, пропустил, спасибо. Я уж не помню, как там что правильно пишется.
Кому понадобится - нагуглит. :)

Затраты незначительные. Пример был как переходный от свитча к отдельной функции, типа группируем фрагмент в логический блок.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, yuryol
  • Страница:
  • 1
  • 2
  • 3
  • 4
  • 5
Время создания страницы: 0.891 секунд