Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Уроки от DK

Уроки от DK 6 года 1 мес. назад #91316

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

Среда разработки
Плагины можно писать, где угодно, даже в блокноте! Вопрос лишь в удобстве. Я использую Notepad++
Основные возможности:
  • Подсветка синтаксиса
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

  • Автозавершение слов и автозакрытие скобок (включается в настройках)
  • ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

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

  • Поиск информации по одному или нескольким документам
  • Замена текста
  • ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]



    Для отладки программ необходимо включить консоль в RPG Maker MV. Есть следующие способы это сделать:
    1. При запуске проекта нажать F8 (не рекомендуется). Надоест каждый раз нажимать
    2. Использовать плагин YEP_CoreEngine (включить соответствующий параметр)
    3. Использовать код (взят из плагина YEP_CoreEngine)
    function openConsole () {
        if (Utils.isNwjs() && Utils.isOptionValid('test')) {
          var _debugWindow = require('nw.gui').Window.get().showDevTools();
          _debugWindow.moveTo(0, 0);
          window.focus();
        }
    };
    openConsole();


    Чтобы вывести информацию в консоль, нужно вызвать функцию: console.log(Object). Object – что выводить. Для удобства напишите следующую функцию:
    function p(object) {
    	console.log(object);
    };

    Вызывать функцию p удобнее, чем писать console.log. В дальнейших примерах будет использоваться p(object);
    Сохраните файл с разрешением .js и включите его в вашем проекте.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: AnnTenna, Pandarius, I_LORD, Kerotan, Демий, poca, yuryol, tvorimvsevmeste, EvilCat, Morok и еще 9 пользователей

    Уроки от DK 6 года 1 мес. назад #91318

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

    Существует 3 типа переменных: локальные, глобальные, переменные класса (о них поговорим позже).

    Локальные переменные – переменные, которые существуют только в функции, объявлены внутри нее и видны только в них.
    Глобальные переменные – переменные, которые существуют все время работы программы/плагина и доступны везде.

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



    Типы данных
    Существуют простые и сложные типы данных.

    Простые – числа (Number), строки (String)
    Сложные – массив (Array), объекты (Object)

    Почему одни простые, а другие – сложные? Все дело в том, как программа взаимодействует с ними.
    Когда мы передаем простые данные в функцию, то перед началом работы функции создается локальная переменная с именем, указанным в параметрах (пример: function func(a) {}. a – локальная переменная для этой функции). В эту переменную копируется значение передаваемого параметра в случае работы с простыми данными, а в случае со сложными данными – копируется ссылка на объект. Что это значит? Когда мы скопировали значение, то мы не изменим первичную переменную. Если мы скопировали ссылку, то мы будем работать с одним и тем же объектом.

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


    Null и глобальные свойства

    null – специальный объект, который обозначает отсутствие объекта (подробнее будет рассмотрен позднее)
    arguments - Локальная переменная arguments доступна внутри функций. Вы можете обращаться к аргументу по номеру, начиная от 0. При этом arguments содержит не объявленные, а реально переданные аргументы.

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


    Таким образом, в функцию можно передать больше параметров, чем она принимает, но получить доступ к этим параметрам можно только с помощью arguments.

    NaN - Не-Числовое значение. Как правило, оно используется для обозначения ошибки при математических операциях. Вместо генерации исключения, функция возвращает NaN. Значение NaN не равно никакому другому числу, включая само NaN. Чтобы проверить переменную на NaN, используйте специальную функцию isNaN.

    Важно! Эта функция полезна, так как значение NaN не может быть проверено операторами эквивалентности. Значение x == NaN и x === NaN всегда false для любого x, даже если x=NaN.

    undefined - Эта глобальная переменная содержит элементарное неопределенное значение - то, которое имеет переменная, значение которой не указано.

    Пример:
    var a; // a будет undefined
    var a = undefined; // a будет undefined


    Условия
    Разница между операторами
    == и === различаются по своей работе.
    == используется для сравнения данных с преобразованием типов данных
    === используется для сравнения без преобразования типов данных

    Явное и неявное преобразование данных
    Явное преобразование – можно конкретно увидеть в коде (пример: var a = Number(‘1’); String ‘1’ преобразуется в 1 с помощью конструктора Number)
    Неявное преобразование – нельзя увидеть в коде

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


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


    Но
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
    Последнее редактирование: 6 года 4 нед. назад от DK.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: AnnTenna, I_LORD, Kerotan, poca, yuryol, tvorimvsevmeste, VarVarKa, ksssq, TheiLGamer, Братец Лис

    Уроки от DK 6 года 1 мес. назад #91319

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

    Сцены

    Из сцен состоит вся игра на RPG Maker. Когда Вы находитесь на карте игры или в меню, или еще где – Вы находитесь в сцене. Сцена отображает окна, спрайты, изображения. Она управляет всеми взаимодействиями окон, изображений и др.

    Список всех сцен находится в файле rpg_scenes.js

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


    Немного о «наследовании» и объявлении сцен
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


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


    Добавим простое окно:
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: AnnTenna, Pandarius, poca, yuryol, tvorimvsevmeste, Serge255, VarVarKa, ksssq, Dimatok, Vikmikzak и еще 1 пользователей

    Уроки от DK 6 года 4 нед. назад #91325

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    Объекты, функции и «классы»

    Объекты и оператор new

    В JavaScript все состоит из объектов (как в нашем мире). Переменная – объект, функция – тоже объект! Мы даже можем записывать функции в переменные.

    Создание объекта с помощью оператора new
    В предыдущем уроке мы создавали окно (создали объект)
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


    Оператор new создает новый объект, используя функцию-конструктор (функция initialize), которая может быть как встроенной в javascript (Date, String), так и определенной пользователем.

    Когда наш плагин будет выполнять эту строчку, то оператор new создаст окно (объект), вызвав функцию initialize (передав параметры x, y, width, height) и объект запишется в переменную.

    Функция initialize окна Window_Base

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


    Оператор new всегда вызывает первой функцию initialize у создаваемого объекта.
    У окна Window_Base явно определена функция initialize, но можно и не определять ее.
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


    В данном случае функция func сама по себе является initialize. Также можно заметить, что без оператора new значение переменной a неопределенно.

    Договоримся о понятиях
    В JavaScript нет понятия класс, но мы будем использовать его для обозначения сцен, окон, спрайтов и т.д.

    Что такое класс? Класс – коробка. Коробка, в которую мы можем положить вещи (какие-то данные), также мы можем производить различные действия с коробкой (открыть, посмотреть и т.д.) – это функции.

    Итак, класс – это набор данных и функций для взаимодействия с этими данными.

    Что такое класс в RPG Maker MV, и как он объявляется?
    Классом мы будем называть функции, которые хранят переменные и имеют встроенные функции, и явно определенную функцию initialize.

    Существует два типа классов: динамические и статические (о статических классах поговорим позже). Забегая вперед, скажу, что при описании функции в динамическом классе используется ключевое слово prototype, но это не все отличия
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


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


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


    Третий тип переменных – переменные класса
    Итак, переменная класса – переменная, которая объявляется внутри любой функции класса через указатель this.
    Эти переменные доступны через созданный объект с помощью . (точки), как и функции класса.

    Когда мы создали объект new classA(), в object записался наш объект, и он будет существовать до конца работы программы, то есть в переменной a будет храниться значение ‘class’, пока мы его не изменим или программа не завершит работу, либо пока мы принудительно не уничтожим объект.

    Уничтожить объект мы можем так: object = null; // в прошлом уроке мы говорили, что null – объект, означающий пустоту. Теперь мы не сможем вызвать функцию object.changeA() или обратиться к переменной а - object.a.

    Если мы записали объект в локальную переменную, то после выхода из функции этот объект уничтожается.
    Итак, благодаря этому типу переменных игра знает на какой вы сейчас карте, сколько у вас денег и т.д., потому что в глобальной переменной хранится объект, в котором определены все эти переменные (номер карты, золото и прочее). В своих плагинах вы можете получить доступ к этой информации в любой момент.

    Важно! Нельзя давать одинаковые имена переменным класса и функциям класса.

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

    По умолчанию значение любой переменной неопределенно, то есть принимает значение undefined
    Этим можно пользоваться для создания более гибких и универсальных функций
    Последнее редактирование: 6 года 4 нед. назад от DK.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: AnnTenna, Pandarius, poca, Serge255, VarVarKa, PringOva, Блиноежка

    Уроки от DK 6 года 4 нед. назад #91326

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

    Одно важное уточнение на счет сцен. Когда мы открываем сцену, то сначала вызывается функция initialize (создается объект), потом вызывается функция create. Обе функции должны быть определены.
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


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


    Класс Window_Test
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: AnnTenna, Pandarius, poca, tvorimvsevmeste, VarVarKa, Noxmils

    Уроки от DK 6 года 4 нед. назад #91327

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

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


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


    Протестируйте заливку экрана и попробуйте изменить функцию standardPadding

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


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


    Сейчас при нажатии на команды ничего не происходит. Чтобы это исправить, нужно добавить в сцену обработчик нажатия команд.
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


    Теперь создадим окно, в котором будет отображаться простенький таймер. Этим окном мы сможем управлять с помощью только что созданного окна команд
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: AnnTenna, Pandarius, poca, yuryol, tvorimvsevmeste, Serge255, VarVarKa

    Уроки от DK 6 года 4 нед. назад #91328

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    Класс окна таймера
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


    Разберем подробнее функцию update
    В функции initialize мы установили переменную this.paused = true

    Зачем? Тем самым мы сказали, что «таймер остановлен». Функция update будет возвращаться в первом же условии.

    Если же у нас идет таймер, то мы увеличиваем переменную для счета кадров в секунду. В идеале эта функция должна вызывать 60 раз в секунду, поэтому, когда счетчик доходит до 60, то мы можем сказать, что прошла 1 секунда и изменить наш таймер. Это в идеале. На самом деле FPS не стабилен и нельзя быть уверенным, что секунда в игре равна секунде в жизни, но для примера сойдет.

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

    Как я говорил в прошлом уроке не стоит нагружать функцию update лишними вычислениями. Мы это и сделали. При паузе мы вообще возвращаемся из функции, а при работе таймера значение рисуется раз в секунду, а не 60 раз в секунду.

    Добавим возможность управлять нашим таймером и небольшая правка функций
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: poca, tvorimvsevmeste, Noxmils

    Уроки от DK 6 года 4 нед. назад #91329

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    Статический класс
    Ранее мы говорили о том, что существуют динамические и статические классы. Поговорим подробнее о статических классах.

    Статический класс создается всего один раз в самой программе. Создать объект статического класса через оператор new невозможно. Статический класс, как и глобальная переменная, живет всю программу и виден везде.

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

    Пример статических классов в игре:
    DataManager – управляет загрузкой и сохранением игровых данных.
    ConfigManager – хранит и управляет данными настройки игры (уровень звука и др.)
    StorageManager – сохраняет и загружает данные из файлов на компьютере или на сервере.
    ImageManager – управляет загрузкой изображений.
    AudioManager – управляет проигрыванием звуков
    SoundManager – вызывает проигрывание звуков с помощью AudioManager.
    TextManager – хранит все текстовые переменные, что редактируются в Базе Данных.
    SceneManager – управляет сценами.
    BattleManager – управляет битвами.
    PluginManager – управляет плагинами.

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

    При попытке создать объект с помощью оператор new мы получим ошибку с текстом, указанным на изображении. Соответственно функция initialize не вызывается у таких классов, но может присутствовать (ее нужно будет вызывать самостоятельно)

    Функции объявляются следующим образом:
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


    Игровые данные
    Все, что вы редактируете в Базе Данных в игре можно найти в глобальных переменных.
    DataManager загружает всю информацию при запуске игры.

    $dataActors - персонажи
    $dataClasses - классы
    $dataSkills - навыки
    $dataItems - вещи
    $dataWeapons - оружие
    $dataArmors - броня
    $dataEnemies - враги
    $dataTroops – группы врагов
    $dataStates - состояния
    $dataAnimations - анимации
    $dataTilesets - тайлсеты
    $dataCommonEvents – общие события
    $dataSystem - система
    $dataMapInfos – информация о картах
    $dataMap – карты

    Эти данные хранятся в файлах в вашем проекте. При сохранении игры они не сохраняются. Изменяются только в Базе Данных. Тип данных у этих переменных – массивы. Причем учтите, что нулевой элемент равен null !

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

    $gameTemp – временные данные
    $gameSystem – системные данные
    $gameScreen – данные экрана
    $gameTimer – данные таймера
    $gameMessage – данные сообщений
    $gameSwitches - переключатели
    $gameVariables - переменные
    $gameSelfSwitches – локальные переключатели
    $gameActors - персонажи
    $gameParty - партия
    $gameTroop – отряд врагов
    $gameMap - карта
    $gamePlayer – игрок

    Из этих данных не сохраняются $gameTemp, $gameMessage и $gameTroop.
    Тип данных у этих переменных – классы. Определение этих классов можно посмотреть в файле rpg_objects.js

    В следующем уроке мы подробно рассмотрим спрайты и битмапы.

    Существует два наиболее используемых класса спрайтов: Sprite_Base и Sprite_Button
    Sprite_Button – поддерживает нажатие мышью или пальцами на телефонах.
    Спрайт – контейнер для управления битмапами.

    Битмап (Bitmap) – область для рисования или рисунок, загруженный из файла. Поддерживает рисование текста, заливку цветом и др. функции (подробнее в справке или посмотрите класс Bitmap в файле rpg_core.js).
    Спрайт используется для хранения битмапов и управления ими. Например, есть функции перемещения, возможность установить расположение рисунка (x, y), повернуть, увеличить/уменьшить, скрыть/показать и др.

    Рекомендуется
    Пролистайте файлы rpg_objects.js и rpg_managers.js
    Посмотрите, какие у них есть переменные и функции
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: Pandarius, poca, yuryol, tvorimvsevmeste, Noxmils

    Уроки от DK 6 года 4 нед. назад #91330

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    Поговорим подробнее о спрайтах и битмапах
    Как было сказано в прошлом уроке – спрайты служат для отображения и управления битмапами. Битмапы – рисунки.

    Изменим наше окно таймера и сделаем из него спрайт, а также добавим фон в нашу сцену

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


    На наш таймер можно будет нажимать мышкой или пальцами на телефоне, потому что мы используем Sprite_Button.
    В окнах битмап хранится в переменной this.contents. В спрайтах битмапы хранятся в this.bitmap.
    Также обратите внимание на изменения в функции drawTimer

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


    Мы дополнили метод update, потому что оригинальная функция отслеживает нажатия мыши или нажатия на экран. В Sprite_Base можно оставлять update пустым, если нужно. Также часто можно увидеть, что используют просто Sprite вместо Sprite_Base. Если посмотреть файл rpg_sprites.js, то можно увидеть, что различия минимальны. Добавлены методы анимации и скрыть/показать спрайт).

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


    Теперь мы можем управлять таймером из окна команд или нажатием мыши на таймер.
    Функция setClickHandler аналогичная setHandler у окон, только не нужно указывать символ. Происходит привязка функции-обработчика сцены к нашему спрайту и при нажатии на него, вызывается привязанная функция. В функции мы меняем значение переменной paused.

    В следующих уроках поговорим о том, как загружать изображения в битмапы
    Последнее редактирование: 6 года 4 нед. назад от DK.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: yuryol, tvorimvsevmeste, Noxmils

    Уроки от DK 6 года 4 нед. назад #91331

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    Новая игра, сохранение и загрузка

    Когда начинается новая игра, все игровые объекты создаются в функции DataManager.createGameObjects, поэтому стоит переопределять ее, чтобы создавать собственные объекты.

    Сохраняются данные в функции DataManager.makeSaveContents
    Важное замечание: нельзя сохранять объекты, которые имеют графическую составляющую (окна, спрайты, битмапы). Но вы можете сохранять переменные этих объектов и после загрузки снова присваивать их.

    Загружаются данные в функции DataManager.extractSaveContents
    Важное замечание: если вы написали плагин, который сохраняет/загружает свои данные, и у вас есть старые сохранения, то они могут не работать, потому что в них нет этих новых данных. Вы можете добавить условие проверки существуют ли данные в сохранении

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


    В функции DataManager.createGameObjects создаются несколько объектов, при этом не нарушается создание игровых объектов (функции дополнена).

    В функции DataManager.makeSaveContents мы записали в переменную contents игровые данные, которые были сохранены до нашей функции, затем сохраняются объекты плагина. Объект $Game_Time_Tint – спрайт. Мы не можем его сохранить, но мы можем сохранить его переменные, которые нужны для правильной работы при загрузке игры.

    В функции DataManager.extractSaveContents мы сначала проверяем загрузили игровые данные, затем начали загружать свои данные. Условия нужны для совместимости плагина со старыми сохранениями, но в таком случае для этих объектов будут применены значения по умолчанию, которые определены в классах объектов.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: poca

    Уроки от DK 6 года 4 нед. назад #91332

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    Создание и использование параметров плагина, а также информация о плагине в диспетчере дополнительных модулей

    Чтобы задать плагину информацию, напишите комментарий следующего вида:

    /*:
    * @plugindesc – Описание плагина
    * @author – Автор
    * @help – Информация о плагине, которая отображается при нажатии кнопки справка

    * @param – Название параметра
    * @desc – Описание параметра
    * @default – Стандартное значение

    */

    Использование ваших параметров
    Параметры вашего плагина можно получить из функции PluginManager.parameters(Plugin);

    Где Plugin – название вашего плагина в ковычках. Название плагина – название js файла

    Получаемый тип параметров – Таблица или Hash (массив, в котором используются не индексы, а ключи в виде строки)

    Пример на основе плагина Время (Game Time)
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


    Итак, в переменной GameTimeParam.param находятся все наши параметры. Далее запишем каждый параметр в отдельную переменную.
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

    Обращаемся к нашей таблице, указывая ключ в виде названия нашего параметра. Так же здесь присутствует преобразование к Number. Все значения параметров в таблице имеют тип String.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: poca, yuryol

    Уроки от DK 6 года 4 нед. назад #91333

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

    Скачайте плагин и попробуйте разобраться, что он делает, как устроен и напишите свои комментарии к коду. Затем скиньте мне. Если что-то не получится, то ничего страшного. Будем разбираться вместе!
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: poca

    Уроки от DK 6 года 4 нед. назад #91339

    • I_LORD
    • I_LORD аватар
    • Вне сайта
    • Светлый дракон
    • ;)
    • Сообщений: 775
    • Спасибо получено: 727
    • Проект месяца 3 местоРазработчикПроект года 2 местоВетеранПроект месяца 2 местоОраторПаладинПроект месяца 1 место
    Я вот немного не понимаю для кого эти уроки? Для тех кто понимает в языках программирования?
    Я вот почитал несколько постов, но ничего не вкурил..вообще. :blink: :blush:
    Если уроки для новичков, то может стоит начать совсем с основ?
    Последнее редактирование: 6 года 4 нед. назад от I_LORD.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: poca

    Уроки от DK 6 года 4 нед. назад #91340

    • yuryol
    • yuryol аватар
    • Вне сайта
    • Архитектор Миров
    • Сообщений: 1656
    • Спасибо получено: 2618
    • 3 место ГотвКомпозиторУчитель1 место в ГотвПобедитель конкурсаОрганизатор конкурсов2 место Оратор
    I_LORD пишет:
    Я вот немного не понимаю для кого эти уроки? Для тех кто понимает в языках программирования?
    Я вот почитал несколько постов, но ничего не вкурил..вообще. :blink: :blush:
    Если уроки для новичков, то может стоит начать совсем с основ?

    Наверное для тех, кто знает js на уровне новичка, но при этом не знает какое устройство самого мейкера.
    Я например на "кодакадеми" до темы "функции" дошел,мне первые три поста более менее понятны, кроме некоторых моментов. Остальные посты пока не читал :blush:
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: I_LORD, DK, poca

    Уроки от DK 6 года 4 нед. назад #91348

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    Юриол прав. Требуется база знаний по javascript
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: I_LORD, poca, tvorimvsevmeste

    Уроки от DK 5 года 11 мес. назад #91763

    • tvorimvsevmeste
    • tvorimvsevmeste аватар
    • Вне сайта
    • Просветлённый
    • Сообщений: 250
    • Спасибо получено: 50
    Денис, а вы могли бы показать пример с чтением из свойства note? Особенно интересно у героев (в базе данных) и у событий. Пожалуйста!
    Поживем — увидим,
    доживем — узнаем,
    переживем — научимся…
    Администратор запретил публиковать записи гостям.

    Уроки от DK 5 года 11 мес. назад #91767

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    tvorimvsevmeste пишет:
    Денис, а вы могли бы показать пример с чтением из свойства note? Особенно интересно у героев (в базе данных) и у событий. Пожалуйста!

    Пример на основе плагина Редкие Вещи. Можете скачать и посмотреть код.

    Чтобы обработать заметки вещей, оружия или чего еще, нужно дополнить функцию DataManager.isDatabaseLoaded, которая отвечает за проверку загружена ли база данных или нет. Если база данных загружена, то мы можем приступить к обработке объектов из базы данных.

    Код функции DataManager.isDatabaseLoaded выглядит так:
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

    Функция обязательно должна возвращать значение типа Bool, отвечающее за загрузку базы данных.

    if (!Rare_Items_DataManager_isDatabaseLoaded.call(this)) return false;
    Если база данных не загружена, то возвращаем значение false;

    this.processRareItemsNotetags($dataItems);
    this.processRareItemsNotetags($dataWeapons);
    this.processRareItemsNotetags($dataArmors);
    Вызываем функцию обработки заметок для предметов, оружия и брони

    return true;
    Возвращаем true - база данных загружена

    Далее переходим к функции обработки заметок: DataManager.processRareItemsNotetags
    Функция принимает один параметр - массив, содержащий объекты предметов, оружия и т.д.

    В функции нужно сделать цикл for от 1 до количества элементов в массиве
    for(var i = 1; i < database.length; i++)

    Внутри цикла создаем 2 переменные:
    1. var item = database[ i ];
    2. var notedata = item.note.split(/[\r\n]+/);

    item - объект, в котором хранится информация о предмете, оружии и т.д.
    notedata - массив, который мы получаем из разделения заметок item-объекта с помощью регулярного выражения.

    Теперь мы можем обрабатывать каждую строчку заметок, используя цикл for от 0 до количества элементов в массиве
    for(var j = 0; j < notedata.length; j++)

    notedata[j] - j-ая строка заметок

    Полный код функции DataManager.processRareItemsNotetags:
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


    Для героев нужно посылать в функцию $dataActors
    Последнее редактирование: 5 года 11 мес. назад от DK. Причина: сайт съел символы
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: Демий, poca, tvorimvsevmeste

    Уроки от DK 5 года 11 мес. назад #92461

    • AnnTenna
    • AnnTenna аватар
    • Вне сайта
    • Администратор
    • ловлю волны настроения
    • Сообщений: 4374
    • Спасибо получено: 4388
    • Даритель СтимкеяРазработчикПроект месяца 1 место3 местоУчительПроект месяца 2 место2 место ГотвПроект месяца 3 местоПобедитель конкурсаОрганизатор конкурсов
    Где то с середины становится ничего не понятно вообще, сначала читала, и было, как мне казалось, доступным языком, хотя порой запутанно, ну потом уже невозможно стало это читать, как смотрю книгу вижу фигу. Наверное, такие уроки надо делать с большим количеством примеров или стараться не так много информации и комментариев сыпать..а как то боле последоватлеьно, в общем не знаю. Или, может, потому что мой уровень слишком слаб для таких уроков, не получилось их понять :blush:

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

    Уроки от DK 4 года 6 мес. назад #100315

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 940
    • Спасибо получено: 1121
    • Программист JavaScript 2 место Проект месяца 3 местоУчительПаладинПрограммист RubyРазработчикПроект месяца 2 местоДаритель СтимкеяПроект месяца 1 место
    Поднимаю тему, потому что идет конкурс.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: Doctor_Bug
    Время создания страницы: 0.587 секунд