Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.

Вопрос про .update()

Организатор конкурсов Тестер Программист JavaScript
Больше
7 года 7 мес. назад #105881 от Noxmils
Noxmils создал тему: Вопрос про .update()
Здесь у меня не работает .update() :wall: . Как заставить работать?
Code:
(function () { function CameraZoom (zoom, period) { console.log('CameraZoom'); this.initialize.apply (this, arguments); }; CameraZoom.prototype.initialize = function (zoom, period) { this.Z = 0; this.ZoomSpeed = (zoom - SceneManager._screenHeight) / period; console.log('init ' + zoom); }; CameraZoom.prototype.update = function (zoom, period) { console.log ('update'); }; Zooming = function (zoom, period) { new CameraZoom(zoom, period); };

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

Ветеран Поддержка Фонда Разработчик Проект месяца 3 место Учитель Оратор Даритель Стимкея 2 место За 2 место на конкурсе маппинга Программист Ruby Паладин
Больше
7 года 7 мес. назад - 7 года 7 мес. назад #105887 от Dmy
Dmy ответил в теме Вопрос про .update()
update() сама по себе не вызывается. Тебе надо прописать её в чьём-то чужом update(). Чтобы прописать код в чужой функции, в RPG Maker MV принято делать так:
Code:
//Сохраняем оригинальный метод update в переменную var Scene_Map_update = Scene_Map.prototype.update; //Заменяем метод update своим методом Scene_Map.prototype.update = function() { //Делаем тут что что-то своё (например, вызываем update своего объекта) //... //А теперь вызываем оригинальный update, который мы сохранили Scene_Map_update.call(this); }
Теперь, когда Scene_Map вызывает свой метод .update, она на самом деле вызывает наш метод update! :)

Примечание. С названиями Scene_Map_update надо быть осторожным: названия такого типа легко могут совпасть в разных модулях. Чтобы не случалось совпадений, обязательно нужно делать пременную локальной — var в var Scene_Map_update нужен именно для этого — и окружить весь свой код в большую самовызываемую функцию (function () { ... })() — потому что var’ы локальны только в пределах функции.

Noxmils пишет:

Code:
Zooming = function (zoom, period) { new CameraZoom(zoom, period); };

Этот кусочек скорее всего неправильный. В нём ты создаёшь новый класс Zooming, в инициализаторе которого создаётся CameraZoom... И сразу же выбрасывается. Потому что ты никуда его не сохраняешь.

Вместо этого надо переписать какие-то функции стандартных объектов RPG Maker MV и сделать, чтобы CameraZoom создавалась в них. Какие именно функции и каких объектов надо переписать — не знаю.

Я не знаю, что ты пытаешься сделать и поэтому не знаю, какую функцию тебе надо переписать. Я могу только примерно показать, как можно переписать функции, чтобы добавить твой объект:
Code:
//Пример, как переписывать функции //Я не знаю, какие функции ты будешь переписывать и что тебе вообще надо сделать //Во-первых надо где-то хранить этот cameraZoom: либо в переменной, //либо в каком-то из стандартных объектов типа Scene_Map; зависит от того, //сколько у тебя должно быть этих CameraZoom’ов. Предположим, что он у //тебя один на всю игру — тогда можно сделать так: var cameraZoom; //Создадим его в какой-то момент. Допустим, при использовании // команды плагина ‘create_camera_zoom zoom period’, где zoom и period — числа. // В RPG Maker MV есть готовая функция для команд плагина, которая разбивает // введённый пользователем текст по пробелам и передаёт первое слово как // command, а остальное — как массив args (т.е. если выбрать команду // Команда плагина в событии и ввести create_camera_zoom 10 20, // то нам передастся command = 'create_camera_zoom' и args = ['10', '20']. // Вот её и используем: var Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { if (command == 'create_camera_zoom' && args.length >= 2) { //если команда наша — обрабатываем её сами var zoom = parseFloat(args[0]); var period = parseFloat(args[1]); if (!isNaN(zoom) && !isNaN(period)) { //создаём cameraZoom, только если нам передали числа, а не какую-то //пакость типа текста cameraZoom = new CameraZoom(zoom, period) } } else { //если команда не наша — вызываем сохранённую функцию, пусть //другие плагины свои команды отработают Game_Interpreter_pluginCommand.call(this, command, args) } } //И перепишем чем-то update, чтобы вызывал update нашего CameraZoom. Если CameraZoom //будет использоваться на карте, кажется логичным переписать метод update объекта //Scene_Map, отвечающего за отрисовку экрана хождения по карте: var Scene_Map_update = Scene_Map.prototype.update; Scene_Map.prototype.update = function() { if (cameraZoom) { //проверим, что cameraZoom вообще существует, чтобы не было ошибки cameraZoom.update(); } //А потом выполним стандартные действия при update Scene_Map Scene_Map_update.call(this); }

Если непонятно, спрашивай!
Последнее редактирование: 7 года 7 мес. назад пользователем Dmy.
Спасибо сказали: yuryol, Cabbit, Doctor_Bug, Noxmils

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

Организатор конкурсов Тестер Программист JavaScript
Больше
7 года 7 мес. назад #105892 от Noxmils
Noxmils ответил в теме Вопрос про .update()
Спасибо за очень развернутый ответ!

По поводу Zooming, у меня есть строка window.Zooming = Zooming, которую я почему-то не вставил в пост.

Тогда я не понимаю, почему у ДК в примерах update срабатывал как надо.

Из-за DK_Primer.prototype = Object.create(window_Base.prototype)? Но я к себе тоже такую строку ставил и не работало.

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

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
7 года 7 мес. назад #105894 от DK
DK ответил в теме Вопрос про .update()
Потому что это окно было добавлено в сцену с помощью вызова функции addWindow. Сцена сама стала вызывать update функцию после добавления окна.
Спасибо сказали: Dmy, Noxmils

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

Организатор конкурсов Тестер Программист JavaScript
Больше
7 года 7 мес. назад #105896 от Noxmils
Noxmils ответил в теме Вопрос про .update()
Я, кажется, понял. addWindow вызывается в Window_Base.prototype.initialize.call?

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

Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
Больше
7 года 7 мес. назад #105897 от DK
DK ответил в теме Вопрос про .update()
Нет, в сцене, где - то в методе create.
Спасибо сказали: Noxmils

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

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