Войти на сайт

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

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

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

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

Как известно, при указания в маршруте события движения "вперед", событие будет двигаться только туда, куда оно направлено. При этом команд "повернуться по-диагонали" нет, хотя движение по-диагонали задать можно.

Функция ниже исправляет этот недочет. Теперь можно задать событию "поворот по-диагонали" в маршруте движения через скриптовую команду:
this.diagonalDirect = 1; // 1 - поворот вниз-влево,3 - вниз-вправо, 7 - влево-вверх, 9 - вправо-вверх

или в другом событии через скриптовую команду:
$gameMap.event(id).diagonalDirect = 9;

После этого при указании в маршруте "вперед" событие будет двигаться по диагонали

Сама функция:
var YuryolMoveForward= Game_Character.prototype.moveForward;
Game_Character.prototype.moveForward = function() {
    switch (this.diagonalDirect) {
        case 1:
            this.moveDiagonally(4, 2);
            break;
        case 3:
            this.moveDiagonally(6, 2);
            break;
        case 7:
            this.moveDiagonally(4, 8);
            break;
        case 9:
            this.moveDiagonally(6, 8);
            break;
        default:
            YuryolMoveForward.call(this);
            break;
    }
};
Последнее редактирование: 5 года 6 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, Cabbit, NeKotZima

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

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

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

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

невнимательность мое всё :( постоянно забываю
поправил
Администратор запретил публиковать записи гостям.

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

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

Бывает, что после загрузки новой карты требуется сделать постоянно одно и тоже. Например, обнулять одни и те же переменные или проверять день или ночь в игре. Вместо того, чтоб на каждую новую карту вставлять автособытие, можно просто всё это добавить в скрипт:
var YuryolStart = Scene_Map.prototype.start;
Scene_Map.prototype.start = function() {
    YuryolStart.call(this);
    //вставляем что хотим:
    $gameVariables.setValue(1, 0); //например, обнуляем 1-ую переменную
};

Сейчас вспомнил еще один вариант - вставить ту строчку в "terminate". Этот вариант мне подсказал кто-то умный, поэтому наверное так будет правильнее
var YuryolTerminate  = Scene_Map.prototype.terminate ;
Scene_Map.prototype.terminate = function() {
    YuryolTerminate.call(this);
    $gameVariables.setValue(1, 0); //например, обнуляем 1-ую переменную
};
Последнее редактирование: 5 года 6 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: NeKotZima, Noxmils

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

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

Чтобы при увеличении окна игры или развороте ее на весь экран не было мыла, вставляем между тегов <head> и </head> в файл index.html в корневой папке игры следующую строчку:
<style type="text/css">	CANVAS{image-rendering: pixelated;}</style>

Подсказал Dirge на нейтралке. Подойдет для пиксельных игр. Стоит учитывать, что шрифт также станет рендериться по другому, а потому лучше заменить его на более "квадратный", а в идеале опять же пиксельный.

Пример (слева с вставкой этой строчке, справа - с обычным рендерингом. Мыло справа видно невооруженным глазом):

Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Lekste, SeaWolf, Noxmils

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

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

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Затем, соответственно, автор указывает на преимущества Imba перед чистым JS:
- длинное слово "function",
- куча скобок,
- частое употребление return

То ли автор знает только основы синтаксиса JS, причем устаревшие, и не знает как переписать функцию с учетом его требований. То ли пытается ввести людей заблуждение (хотя делать это на хабре довольно глупо).
Чтобы подобных заблуждений о длине кода JS не было, давайте немного потренируемся в том, как сделать функцию проще, понятнее и читабельней

Сокращение кода

1. if...else

Давайте и начнем с вышеупомянутой функции и попробуем ее сократить:
function findGreatest(a, b) {
  if (a > b) {
    return a
  } else if (b > a){
    return b
  } else {
    return false
  }
}

1) Выражение в скобках состоят из одной строки, а потому мы их можем убрать:
function findGreatest(a, b) {
  if (a > b) return a
  else if (b > a) return b
  else return false
}

2) Избавляемся от "else". Зачем они здесь, если return и так не дает пройти дальше?
function findGreatest(a, b) {
  if (a > b) return a
  if (b > a) return b
  return false
}

3) Используем сокращенную запись конструкции if...else, тем самым оставив один return
function findGreatest(a, b) {
   return (a > b) ? a
        : (b > a) ? b
        : false
}

4) Знак ">" выше по приоритету, чем "?", а потому мы можем опустить скобки
function findGreatest(a, b) {
   return a > b ? a
        : b > a ? b
        : false
}

5) Перепишем ее как анонимную функцию, т.е. записав в переменную
const findGreatest = function(a, b) {
  return a > b ? a
       : b > a ? b
       : false
}

6) Это позволит следующим шагом записать ее как стрелочную функцию, т.е. избавившись от длинного ненавидимого некоторыми программистами слова "function"
const findGreatest = (a, b) => {
  return a > b ? a
       : b > a ? b
       : false
}

7) Еще одно преимущество стрелочной функции - возможность убрать return совсем, для чего мы должны написать функцию в круглых скобках
const findGreatest = (a, b) => (a > b ? a : a < b ? b : false)

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Таким образом первоначальную функцию мы сократили до одной строки. Удобно ли для него это или нет - выбор автора, а выбора, как видим, немало. Лично мне нравится 2 вариант как самый читаемый и 7 - как самый короткий.

2. Switch

Одна из самых непривычных конструкций js. Многими считается устаревшей, кажется чужеродной, а постоянные вставки "break" бесят чуть ли не всех. Тем не менее в том же мейкере он часто используется для считывания направления персонажа. К примеру в этом посте используется подобная функция:
const move = function (direction) {
  let code;
  switch(direction) {
    case 2:
      code =  'Game_Character.ROUTE_MOVE_DOWN';
      break;
    case 4:
      code =  'Game_Character.ROUTE_MOVE_LEFT';
      break;
    case 6:
      code =  'Game_Character.ROUTE_MOVE_RIGHT';
      break;
    case 8:
      code =  'Game_Character.ROUTE_MOVE_UP';
      break;
  }
  return code
}

1) Мы конечно можем записать брейки в одну строчку, при этом читаемость упадет не сильно
const move = function (direction) {
  let code;
  switch(direction) {
    case 2: code =  'Game_Character.ROUTE_MOVE_DOWN'; break;
    case 4: code =  'Game_Character.ROUTE_MOVE_LEFT'; break;
    case 6: code =  'Game_Character.ROUTE_MOVE_RIGHT'; break;
    case 8: code =  'Game_Character.ROUTE_MOVE_UP'; break;
  }
  return code
}

2) Но можно вообще отказаться от свитча и использовать объект
const move = function (direction) {
  let code = {
    '2': 'Game_Character.ROUTE_MOVE_DOWN',
    '4': 'Game_Character.ROUTE_MOVE_LEFT',
    '6': 'Game_Character.ROUTE_MOVE_RIGHT',
    '4': 'Game_Character.ROUTE_MOVE_UP'
  }
  return code[direction];
}

3) А уже этот объект можем сразу возвращать
const move = function (direction) {
  return {
    '2': 'Game_Character.ROUTE_MOVE_DOWN',
    '4': 'Game_Character.ROUTE_MOVE_LEFT',
    '6': 'Game_Character.ROUTE_MOVE_RIGHT',
    '8': 'Game_Character.ROUTE_MOVE_UP'
  }[direction];
}

Для кого-то это может показаться непривычным, но по мне так подобный вариант не менее чужероден, чем switch

3. if ... else с объектами

В мейкере у игрока и событий похожие методы, а потому часто можно встретить подобную конструкцию
function setParam (params, player) {
  if (player) {
    ...;
  }
  else {
    ...;
  }
  return;
}

Давайте сократим подобную запись взяв как пример подобие функции из этого поста
function setParam (params, value, player) {
  if (player) {
    player[params] = value;
  }
  else {
    $gamePlayer[params] = value;
  }
  return;
}

которую мы вызываем, указывая третий параметр, если мы хотим изменить свойство у события
setParam('_opacity', 0.5, $gameMap.event(1))
и не указываем, если хотим вызвать изменение свойств у героя
setParam('_opacity', 0.5)

1) Перепишем функцию в краткую запись
function setParam (params, value, player) {
   (player) ? player[params] = value : $gamePlayer[params] = value;
}

2) Мы можем переписать выражение
(player) ? player[params] = value
как
(player)[params] = value
а значит подобным образом можем переписать и всю функцию:
function setParam (params, value, player) {
 	(player || $gamePlayer)[params] = value;
}

Итог:

Чем хорошо JS? Тем, что синтаксис дает выбор писать так, как нравится. Можно писать в одну строчку, а можно топорно но читаемо. Можно через стандартные старые конструкции, а можно через функции. Это я еще не говорил о "new Function", о котором можно почитать самостоятельно
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, ZX_Lost_Soul, Seibur, Noxmils

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

  • Noxmils
  • Noxmils аватар
  • Вне сайта
  • Мастер
  • Сообщений: 186
  • Спасибо получено: 349
  • Организатор конкурсовПрограммист JavaScript Тестер
Такой короткий код позволяет пропускать титульный экран, автоматически начиная новую игру.
Scene_Title.prototype.start = function() {
this.commandNewGame();
};
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol, PringOva

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

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

1) Берем картинку в формате PNG с иконкой курсора (например можно скачать здесь)

2) Вставляем в корневую папку игры (там где находится файл index.html)

3) заходим в файл index.html через редактор кода или например блокнот, внутри тега "<head>" вставляем строчку:
<style type="text/css">	CANVAS{cursor:  crosshair; cursor: url(name.png) 53 53, crosshair;}</style>

где name - имя файла нашей иконки, без кавычек.

получится что-то типа
<head>
        <meta charset="UTF-8">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
        <meta name="viewport" content="user-scalable=no">
        <link rel="icon" href="icon/icon.png" type="image/png">
        <link rel="apple-touch-icon" href="icon/icon.png">
        <link rel="stylesheet" type="text/css" href="fonts/gamefont.css">
        <style type="text/css">	CANVAS{cursor:  crosshair; cursor: url(1.png) 53 53, crosshair;}</style>
        <title>Отвязанный проект</title>
    </head>

4) Радуемся! Теперь при наводке курсора в окно игры он меняется на закачанную нами картинку
Последнее редактирование: 4 года 11 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: PanzerCat, SeaWolf, Noxmils, Okorok.S

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

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

Вместо 'Hello, mukerist!' пишем текст который нам нужен (в кавычках)
Вместо '1.txt' пишем любое название файла,а затем через точку тип файла. В данном случае файл называет "1", и это текстовый файл. Файл будет находиться в корне игры
const name = '1.txt';
let text = 'Hello, mukerist!';
const fs = require('fs');
fs.appendFile(name, text, function(err) {
    if (err) throw err;
});

Зачем оно надо?

Например, для тестирования можно записать в файл значения всех переменных
const name = '1.txt';
let text;
const fs = require('fs');
$gameVariables._data.forEach(function(num, i, nums) {
    text = `переменная ${i} = ${num}\n`;
    fs.appendFile(name, text, function(err) {
        if (err) throw err;
    }); 
});

Чтение из текстового файла
const name = '1.txt';
const xhr = new XMLHttpRequest();
let content;
 
xhr.open("GET", name, false);
xhr.send(null); 
content = xhr.responseText;

Затем можно например записать текст в переменную путем добавления в конце строчки
$gameVariables.setValue(1, content);

Зачем оно надо?

Можно, например, легко вставлять длинные тексты в игру, например отрывки из книг, записав в текст в переменную а потом написав "\V[1]" в сообщении мейкер

Интересно, что мейкер сам разобьет длинный текст на несколько сообщений а не будет обрезать и оставлять только первые строки, как это делает редактор
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Lekste, DK, VarVarKa, WhitePaper, PringOva, Okorok.S, nirion

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

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

Для теста своей АБС набросал простенькое логирование.

В try вставляем код своего плагина и при ошибке будет создан файл 'error.log', в котором будет ее описание с датой и временем. Время ставится отдельно для каждой ошибки, а дата - один раз в день.

На днях добавлю также отображение нужных переменных, переключателей, нужных мне свойств событий.

Вот так выглядит записи в логе (скрин из IDE Visual studio 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;
    });
}
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK

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

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

Для теста своей АБС набросал простенькое логирование.

В try вставляем код своего плагина и при ошибке будет создан файл 'error.log', в котором будет ее описание с датой и временем. Время ставится отдельно для каждой ошибки, а дата - один раз в день.

На днях добавлю также отображение нужных переменных, переключателей, нужных мне свойств событий.

Вот так выглядит записи в логе (скрин из IDE Visual studio 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:
const DKTools_SceneManager_onError = SceneManager.onError;
SceneManager.onError = function(error) {
    DKTools_SceneManager_onError.call(this, error);
 
    DKTools.Utils.logError(error);
};

Еще уточни, что запись в файл работает только на ПК.
Последнее редактирование: 4 года 11 мес. назад от DK.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol, Noxmils

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

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

Предлагаю не маяться с try catch, а переопределить SceneManager.onError, как я сделал в DKTools:
const DKTools_SceneManager_onError = SceneManager.onError;
SceneManager.onError = function(error) {
    DKTools_SceneManager_onError.call(this, error);
 
    DKTools.Utils.logError(error);
};

Еще уточни, что запись в файл работает только на ПК.

про даты - точно,старый скрин вставил. потом исправил,все работает :laugh:

за SceneManager.onError спасибо! поизучаю, пока не знаю чем лучше
Администратор запретил публиковать записи гостям.

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

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

Сложение двух массивов:

1 способ - используем метод concat:
Arr1=Arr1.concat(Arr2)
2 способ - используем оператор spread (…):
Arr1 = [...Arr1, ...Arr2]
3 способ - используем метод push:
Arr1.push(...Arr2)

Сложение двух массивов с удалением дубликатов:

1 способ - используем методы concat, filter и indexOf:
Arr1 = Arr1.concat(Arr2.filter(function(el) {return Arr1.indexOf(el) === -1;}))
2 способ - то же самое но стрелочной функцией
Arr1.concat(Arr2.filter((el) => Arr1.indexOf(el)<0))
3 способ - используем методы concat, filter и includes:
Arr1 = Arr1.concat(Arr2.filter((el) => !Arr1.includes(el)))
4 способ - используем оператор spread (…) и Set объект:
Arr1=[...new Set([...Arr1 ,...Arr2])]
5 способ - используем метод concat, оператор spread (…) и Set объект:
Arr1 = [...new Set(Arr1.concat(Arr2))]
Последнее редактирование: 4 года 7 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Noxmils

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

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • ПаладинПрограммист JavaScript 2 место ОраторПроект месяца 2 местоПрограммист RubyПроект месяца 1 местоПроект месяца 3 местоРазработчикДаритель Стимкея
1 способ - используем методы concat, filter и indexOf:
А почему не через includes ?
Администратор запретил публиковать записи гостям.

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

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

да вообще добавлять не хотел,громоздко. хотя если со стрелочками то в принципе норм. добавил
Arr1 = Arr1.concat(Arr2.filter((el) => !Arr1.includes(el)))
Arr1.concat(Arr2.filter((el) => Arr1.indexOf(el)<0))
Администратор запретил публиковать записи гостям.

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

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

Во время разработки я пользовался пакетом Gulp, но на выходе получал все же один файл. Поэтому когда решил раскидать свой плагин боёвки на несколько файлов, чтобы пользователь мог выбирать - нужны ли ему разрушаемость тайлов, сложный худ-бар, собственное меню для АБС или пиксельное движение, то решил что все же лучше сделать плагин модульным не только на входе но и на выходе.

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

функция для подключения в плагин других файлов:

Сама функция:
function include(path) {
    var script = document.createElement("script");
    script.type = "module";
    script.src = path;
    document.body.appendChild(script);
}

Подключения файла YuryolTest.js при помощи нее
include("/js/plugins/YuryolTest.js");
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Noxmils

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

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 911
  • Спасибо получено: 565
  • ОраторВетеранДаритель СтимкеяПрограммист JavaScript Программист Ruby
Неплохо. Как dll какие-то :)
Главное, чтоб у них не было общих глобальных переменных
Последнее редактирование: 4 года 6 мес. назад от Lekste.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

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

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

спасибо!
ага, я в каждом из подобных файлов создаю класс с названием как у файла и вызываю его, чтобы этого избежать =З
типа:
class YuryolAudio {
    soundShot(se) {
        if (se) AudioManager.playSe({name: se, volume: 10, pitch: 100, pan: 0});
    }
}
let yuryolAudio = new YuryolAudio();
Администратор запретил публиковать записи гостям.

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

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

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

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

а разве в жс можно делать классы статическими?
если ты про методы, то да, некоторые методы класса делаю статическими.
Администратор запретил публиковать записи гостям.
  • Страница:
  • 1
  • 2
  • 3
  • 4
  • 5
Время создания страницы: 1.053 секунд