Войти на сайт

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

ТЕМА: Как установить SV-battler-a в Х,Y

Как установить SV-battler-a в Х,Y 3 года 8 мес. назад #118146

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
Хочу попробовать сделать битву-скандал / битву-спор.
К этому очень идут "Galv's Message Styles.js". замечательно рисует комиксовые облачка с текстом нужной точке.
Но нужно знать Х,Y этой точки.
Может кто-то знает как разместить SV-battler-a в конкретную X,Y ?
Наоборот тоже хорошо — узнать Х,Y уже имеющегося баттлера.
Если кто-то знает помогите пожалуйста.
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Администратор запретил публиковать записи гостям.

Как установить SV-battler-a в Х,Y 3 года 8 мес. назад #118148

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • Проект месяца 3 местоПоддержка ФондаУчительПаладин2 место ВетеранОраторДаритель СтимкеяРазработчикЗа 2 место на конкурсе маппинга
tvorimvsevmeste пишет:
Наоборот тоже хорошо — узнать Х,Y уже имеющегося баттлера.
Запустите тест битвы или тест игры. В битве нажмите F12.

Откроется окно инструментов разработчика. В нём нужна вкладка Console (она открыта по умолчанию). Скопируйте в неё такой код:
var members = $gameTroop.members();
console.group('Координаты противников');
SceneManager._scene._spriteset._enemySprites.forEach((e, i) => {
  var name = members [e._enemy.index()].name()
  console.log(`${name}: X центра = ${e.x}, Y верха = ${e.y - e._frame.height}`);
})
console.groupEnd();

Нажмите Enter, чтобы выполнить код в консоли. В результате его выполнения в консоль выведутся координаты:

konsolj2.png



Обновлено после написания: исправил ошибку в коде.
Последнее редактирование: 3 года 8 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: tvorimvsevmeste

Как установить SV-battler-a в Х,Y 3 года 8 мес. назад #118149

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
Это тоже решение, хотя я надеялся, что удастся получить как runtime значения переменных или возвращаемый результат функции. :blush:
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy

Как установить SV-battler-a в Х,Y 3 года 8 мес. назад #118150

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • Проект месяца 3 местоПоддержка ФондаУчительПаладин2 место ВетеранОраторДаритель СтимкеяРазработчикЗа 2 место на конкурсе маппинга
tvorimvsevmeste пишет:
Это тоже решение, хотя я надеялся, что удастся получить как runtime значения переменных или возвращаемый результат функции. :blush:
Описывайте, пожалуйста, свои надежды сразу в ТЗ. :unsure:

Если нужно записывать результат в переменные, то можно сделать, скажем, вот так:
function enemyPosToVars(enemyIndex, xVar, yVar) {
  if (!SceneManager._scene._spriteset || !SceneManager._scene._spriteset._enemySprites)
    return;
 
  var sprites = SceneManager._scene._spriteset._enemySprites
    .filter((eSpr) => eSpr._enemy.index() == enemyIndex);
  if (sprites.length == 1) {
    var sprite = sprites[0];
    $gameVariables.setValue(xVar, sprite.x);
    $gameVariables.setValue(yVar, sprite.y - sprite._frame.height);
  }
}

Код так себе (в идеале надо бы сократить использование приватных переменных), но должен работать.

Сохраните в файл как плагин, а дальше вызывайте командой «вызов скрипта» вот так:
enemyPosToVars(0, 10, 11)
  // Замените 0 на номер противника в отряде (0 — первый, 1 — второй, и т.п.)
  // замените 10 на номер переменной для координаты X
  // замените 11 на номер переменной для координаты Y


А чтобы переместить спрайт, можно попробовать сделать какую-то такую функцию:
function moveEnemyTo(enemyIndex, x, y) {
  if (!SceneManager._scene._spriteset)
    return;
 
  var sprites = SceneManager._scene._spriteset._enemySprites
    .filter((eSpr) => eSpr._enemy.index() == enemyIndex);
 
  if (sprites.length == 1) {
    var sprite = sprites[0];
    sprite.setHome(x, y + sprite._frame.height);
  }
}

Вызывается так:
moveEnemyTo(0, 100, 300)
  // Замените 0 на номер противника в отряде (0 — первый, 1 — второй, и т.п.)
  // замените 100 на координату X
  // замените 300 на координату Y

Засада в том, что эту функцию надо вызывать уже после того, как битва началась и спрайты создались. То есть они сначала создадутся на стандартном месте, а потом можно их переместить.
Последнее редактирование: 3 года 8 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: tvorimvsevmeste, Mur, Alx_Yago

Как установить SV-battler-a в Х,Y 3 года 8 мес. назад #118151

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
:woohoo:
Ура! Это именно то, что было нужно!
:whistle:
Огромное спасибо!
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy

Как установить SV-battler-a в Х,Y 3 года 8 мес. назад #118164

  • tvorimvsevmeste
  • tvorimvsevmeste аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 250
  • Спасибо получено: 50
А ссылочку не кинете?
Поживем — увидим,
доживем — узнаем,
переживем — научимся…
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.339 секунд