Войти на сайт

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

ТЕМА: Позиция названия локации

Позиция названия локации 6 года 8 мес. назад #98744

  • RastaManGames
  • RastaManGames аватар
  • Вне сайта
  • Мастер
  • Сообщений: 172
  • Спасибо получено: 92
  • Разработчик
К сожалению, на зарубежном ресурсе мне так и не ответили, существует ли плагин, позволяющий изменить положение отображения названия локации (которое отображается при входе в неё), поэтому я бы хотел спросить знатоков здесь.

Я использую боевую систему Alpha ABS от господина KageDesu и, к сожалению, по-умолчанию название локации отображается поверх HUD'а игрока и поэтому мне хотелось бы, чтобы название локации отображалось в правом вернем углу.

Скорее всего можно сделать это парой правок в *js файлах проекта или же можно написать "костыль" (подобный мне помогли и написали, когда мне нужно было отцентрировать главное меню строго по середине).

В общем, прошу помощи мастодонтов RPG Maker'а.
Администратор запретил публиковать записи гостям.

Позиция названия локации 6 года 8 мес. назад #98747

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 688
  • Спасибо получено: 350
Нашел скрипт на имя карты. Не факт что это оно, но там есть возможность менять положение вроде как.
endlessillusoft.com/map-name-plus/
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: RastaManGames

Позиция названия локации 6 года 8 мес. назад #98760

  • RastaManGames
  • RastaManGames аватар
  • Вне сайта
  • Мастер
  • Сообщений: 172
  • Спасибо получено: 92
  • Разработчик
К сожалению, это не то, что нужно, но всё равно спасибо!
Название карты с этим плагином прокручивается в верхнем левом углу экрана как бегущая строка.
Я всё же подозреваю, что можно подправить определённую строку в *js файлах проекта.

P.S.: В файле "rpg_windows.js" я нашёл блок под это дело:
// Window_MapName
//
// The window for displaying the map name on the map screen.
 
function Window_MapName() {
    this.initialize.apply(this, arguments);
}
 
Window_MapName.prototype = Object.create(Window_Base.prototype);
Window_MapName.prototype.constructor = Window_MapName;
 
Window_MapName.prototype.initialize = function() {
    var wight = this.windowWidth();
    var height = this.windowHeight();
    Window_Base.prototype.initialize.call(this, 0, 0, wight, height);
    this.opacity = 0;
    this.contentsOpacity = 0;
    this._showCount = 0;
    this.refresh();
};
 
Window_MapName.prototype.windowWidth = function() {
    return 360;
};
 
Window_MapName.prototype.windowHeight = function() {
    return this.fittingHeight(1);
};
 
Window_MapName.prototype.update = function() {
    Window_Base.prototype.update.call(this);
    if (this._showCount > 0 && $gameMap.isNameDisplayEnabled()) {
        this.updateFadeIn();
        this._showCount--;
    } else {
        this.updateFadeOut();
    }
};
 
Window_MapName.prototype.updateFadeIn = function() {
    this.contentsOpacity += 16;
};
 
Window_MapName.prototype.updateFadeOut = function() {
    this.contentsOpacity -= 16;
};
 
Window_MapName.prototype.open = function() {
    this.refresh();
    this._showCount = 150;
};
 
Window_MapName.prototype.close = function() {
    this._showCount = 0;
};
 
Window_MapName.prototype.refresh = function() {
    this.contents.clear();
    if ($gameMap.displayName()) {
        var width = this.contentsWidth();
        this.drawBackground(0, 0, width, this.lineHeight());
        this.drawText($gameMap.displayName(), 0, 0, width, 'center');
    }
};
 
Window_MapName.prototype.drawBackground = function(x, y, width, height) {
    var color1 = this.dimColor1();
    var color2 = this.dimColor2();
    this.contents.gradientFillRect(x, y, width / 2, height, color2, color1);
    this.contents.gradientFillRect(x + width / 2, y, width / 2, height, color1, color2);
};

В своё время мне помогли отцентрировать главное меню, предложив создать *js файл в папке с плагинами:
var _Window_TitleCommand_updatePlacement_Alias = Window_TitleCommand.prototype.updatePlacement;
Window_TitleCommand.prototype.updatePlacement = function() {
	_Window_TitleCommand_updatePlacement_Alias.call(this)
    this.x = 300;
    this.y = 256;
};

Хотелось бы, чтобы тут пошаманил JS-Сеньор и подсказал, что можно запихать в *js файл в папку с плагинами, чтобы название локации отображалось по центру или справа.
Последнее редактирование: 6 года 8 мес. назад от RastaManGames.
Администратор запретил публиковать записи гостям.

Позиция названия локации 6 года 8 мес. назад #98891

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • ОраторПроект месяца 3 местоДаритель СтимкеяУчитель2 место ПаладинПоддержка ФондаРазработчикПрограммист RubyВетеран
Здравствуйте! У меня нет RPG Maker MV, но попробуйте вот такой код, чтобы отцентрировать:
var _Window_MapName_initialize = Window_MapName.prototype.initialize;
Window_MapName.prototype.initialize = function () {
    _Window_MapName_initialize.call(this);
    this.x = (Graphics.boxWidth - this.width) / 2;
}

Или вот такой, чтобы разместить справа:
var _Window_MapName_initialize = Window_MapName.prototype.initialize;
Window_MapName.prototype.initialize = function () {
    _Window_MapName_initialize.call(this);
    this.x = Graphics.boxWidth - this.width;
}


Обратите внимание: я не проверял этот код, потому что у меня нет MV под рукой, и не могу гарантировать его работоспособность. Если при использовании этого кода появится ошибка, скажите, пожалуйста, текст этой ошибки — я исправлю. Если что-то непонятно, спрашивайте.

Пояснение:
  • строчка var _Window_MapName_initialize = Window_MapName.prototype.initialize определяет переменную _Window_MapName_initialize и сохраняет в ней старое значение функции инциализации (initialize) для Window_MapName;
  • Window_MapName.prototype.initialize = function () { ... } заменяет функцию initialize для Window_MapName на нашу собственную функцию-замену,
  • _Window_MapName_initialize.call(this); вызывает старую функцию инициализации внутри нашей новой функции, передавая в качестве текущего объекта [this] текущий объект this функции-замены — чтобы вся инициализация Window_MapName производилась и после замены;
  • строка this.x = ...; присваивает значение переменной x текущего объекта (то есть координате окна по оси x), при увеличении x окно сдвигается направо: если x равно 0, то окно слева, а если x равно Graphics.boxWidth, то окно ровно за правой границей экрана; чтобы окно было в пределах экрана, нужно присваивать значения от 0 до (Graphics.boxWidth - this.width).

RastaManGames пишет:
Скорее всего можно сделать это парой правок в *js файлах проекта или же можно написать "костыль"
Править стандартные JS-файлы не стоит. Это лишит Вас возможности обновить свою игру до новой версии RPG Maker MV в будущем, ведь такое обновление затрёт все Ваши изменения.

Если интересно, то при редактировании файла можно заменить 0 в Window_Base.prototype.initialize.call(this, 0, 0, wight, height); на что-то другое. Например, можно заменить на Window_Base.prototype.initialize.call(this, Graphics.boxWidth - wight, 0, wight, height); — при вызове Window_Base.prototype.initialize передаются координаты по x, по y, ширина и высота (а при вызове через .call ещё и объект this), то есть можно заменить первый 0 на координату по x.

Но так делать не надо, ведь RPG Maker MV постоянно обновляется, оптимизируется, в нём исправляются ошибки. Если Вы отредактируете свои файлы, то Вы потеряете возможность обновить движок в будущем, а это очень плохо.

Оформление своего кода в плагинах — это не «костыль», а рекомендуемый подход, «лучшая практика».
Последнее редактирование: 6 года 8 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.299 секунд