- Сообщений: 187
- Спасибо получено: 351
Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.
Вопрос про .update()
7 года 7 мес. назад #105881
от Noxmils
Noxmils создал тему: Вопрос про .update()
Здесь у меня не работает .update()
. Как заставить работать?
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);
};
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
7 года 7 мес. назад - 7 года 7 мес. назад #105887
от Dmy
Dmy ответил в теме Вопрос про .update()
update() сама по себе не вызывается. Тебе надо прописать её в чьём-то чужом update(). Чтобы прописать код в чужой функции, в RPG Maker MV принято делать так:
Теперь, когда Scene_Map вызывает свой метод .update, она на самом деле вызывает наш метод update! 
Примечание. С названиями Scene_Map_update надо быть осторожным: названия такого типа легко могут совпасть в разных модулях. Чтобы не случалось совпадений, обязательно нужно делать пременную локальной — var в var Scene_Map_update нужен именно для этого — и окружить весь свой код в большую самовызываемую функцию (function () { ... })() — потому что var’ы локальны только в пределах функции.
Вместо этого надо переписать какие-то функции стандартных объектов RPG Maker MV и сделать, чтобы CameraZoom создавалась в них. Какие именно функции и каких объектов надо переписать — не знаю.
Я не знаю, что ты пытаешься сделать и поэтому не знаю, какую функцию тебе надо переписать. Я могу только примерно показать, как можно переписать функции, чтобы добавить твой объект:
Если непонятно, спрашивай!
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 надо быть осторожным: названия такого типа легко могут совпасть в разных модулях. Чтобы не случалось совпадений, обязательно нужно делать пременную локальной — var в var Scene_Map_update нужен именно для этого — и окружить весь свой код в большую самовызываемую функцию (function () { ... })() — потому что var’ы локальны только в пределах функции.
Этот кусочек скорее всего неправильный. В нём ты создаёшь новый класс Zooming, в инициализаторе которого создаётся CameraZoom... И сразу же выбрасывается. Потому что ты никуда его не сохраняешь.Noxmils пишет:
Code:Zooming = function (zoom, period) { new CameraZoom(zoom, period); };
Вместо этого надо переписать какие-то функции стандартных объектов 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.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
7 года 7 мес. назад #105892
от Noxmils
Noxmils ответил в теме Вопрос про .update()
Спасибо за очень развернутый ответ!
По поводу Zooming, у меня есть строка window.Zooming = Zooming, которую я почему-то не вставил в пост.
Тогда я не понимаю, почему у ДК в примерах update срабатывал как надо.
Из-за DK_Primer.prototype = Object.create(window_Base.prototype)? Но я к себе тоже такую строку ставил и не работало.
По поводу Zooming, у меня есть строка window.Zooming = Zooming, которую я почему-то не вставил в пост.
Тогда я не понимаю, почему у ДК в примерах update срабатывал как надо.
Из-за DK_Primer.prototype = Object.create(window_Base.prototype)? Но я к себе тоже такую строку ставил и не работало.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
7 года 7 мес. назад #105894
от DK
DK ответил в теме Вопрос про .update()
Потому что это окно было добавлено в сцену с помощью вызова функции addWindow. Сцена сама стала вызывать update функцию после добавления окна.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
7 года 7 мес. назад #105896
от Noxmils
Noxmils ответил в теме Вопрос про .update()
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
7 года 7 мес. назад #105897
от DK
DK ответил в теме Вопрос про .update()
Нет, в сцене, где - то в методе create.
Спасибо сказали: Noxmils
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.100 секунд
