Тему публиковал ночью, засыпая. =)
Тут расскажу подробнее о концепции, так сказать, плагина - может помочь его использовать.
Ну и опишу более полно настройки и возможности.
Спойлер Идея:Сама идея плагина, повторюсь, состоит в том, что бы сделать картинки более фунциональными.
То есть - нажимать на них уже было можно, при помощи дефолтых плагинов MZ - PictureButton и TextButton.
Вроде бы были плагины и на реакцию при наведении, но на MZ я не нагуглил.
И я задумался - а нельзя ли перемещать картинки по клику мышши? В принципе, это можно делать и эвентами (и стандартным кодом мейкера), но...
Перемещение само по себе мало что дает. Полезнее, если на это дело навесить логику...
И я совместил все в одном - ховер, клик, перемещение с реакциями на это все.
Под перемещением картинки понимается следующее - (при соответствующей настройке) вы нажимаете на картинку левой кнопкой мыши,
после чего при нажатии левой кнопкой мыши в другую часть экрана - картинку летит туда.
Если после нажатия на картинку нажать правой кнопкой - выбор картинки отменяется!
Если после перемещения картинка оказалась в Дропзоне - что-то происходит (что настроили).
Если вы перемещаете картинку командами мейкера - не происходит ничего...ТОЛЬКО кликом мыши!
Спойлер Концепция:Думаю, относительно вызова Общего события при нажатии на правую кнопку мыши или колёсика, все ясно (нажал - запустилось событие).
А вот с движением картинок интереснее. В терминах данного плагина картинки делятся на: "полезные картинки" (в плагине - "uzefulPicture") и "дропзоны"("dropzone").
Очень важно запомнить, что в данном плагине картинка ИЛИ "Полезная" ИЛИ "Дропзона" - и тем и другим сразу картинка быть не может!!!
Полезная картинка - картинка, с которой можно проводить дополнительные манипуляции (ховер мыши, клик ЛКМ, перемещение).
Дропзона - картинка, которая принимает на себя Полезную картинку и вызывает Общее событие при вхождении ее на себя.
Под "вхождениям на себя" имеется ввиду, что координаты Полезной картинки находятся в пределах координат Дропзоны.
При этом, мейкер считает координаты всех картинок от верхнего левого края картинки (см. рисунок).
Теоретически, можно сделать и другой расчет пересечения, но это я уже не осилил. Может быть у вас получится. =)
Если проводить параллель с реальностью - вы ложите игральную карту (Полезную картинку) на книгу (Дропзону) и происходит ядерный взрыв холодильника, что у вас за спиной.
Но только если карта - "Дама пик", книга - том сочинений Пушкина и...холодильник закрыт.
Спойлер Настройка:Плагин позволяет, в некоторой степени, настроить поведения Полезных картинок и Дропзон.
Например, что дропзона реагирует только на полезные картинки с определенной "Меткой", а не на все подряд.
Или что дропзона отрабатывает только один раз...или что после попадания полезной картинки на дропзону, ее уже нельзя перемещать.
Вышенаписанное (и то, что будет ниже) - дефолтные возможности.
С учетом того, что в Общем событии (после клика на картинку, например), можно командами скрипта поменять ее же настройки...Вариантов
поведения, возможно, гораздо больше.
Настройка при создании:
Пример настройки для создания Полезной картинки:
id - номер картинки.Код:let picSettings = { id: 1, mark: 'JS', isHoverable: true, onHoverCommonEventId: 32, isClickableLeft: true, onLeftClickCommonEventId: 33, isMovable: true, moveSpeed: 60, onDropzoneCommonEventId: 37 } DKR.UsefulPictures.createUsefulPic(picSettings);
mark - текст в кавычках; метка, что бы активировать реацию Дропзоны на эту картинку (если у Дропзоны другая метка, то она не реагирует!).
isHoverable - true / false (да или нет); будет ли вызвано Общее событие при наведении курсора мыши на картинку.
onHoverCommonEventId - номер Общего события; если isHoverable: true, то вызывает это Общее событие.
isClickableLeft - true / false (да или нет); будет ли при клике ЛКМ вызвано Общее событие.
onLeftClickCommonEventId - номер Общего события; если isClickableLeft: true, то вызывает это Общее событие.
isMovable - true / false (да или нет); будет ли двигаться картинка при кликах ЛКМ.
moveSpeed - число скорости движения; если isMovable: true, то картинка двигается с указанной скоростью.
onDropzoneCommonEventId - номер Общего события, вызываемого при помещении данной картинки на подходящую Дропзону.
То есть, можно сделать картинки:
а) Только ховер.
б) Только клик.
в) Только перемещение.
г) Комбинация вышеуказанных вариантов.
д) Плюс вызывать Общее событие, прописанное в этой конкретной картинке (вместе / кроме события на Дропзоне)...или не вызвать.
Пример настройки для создания Дропзоны картинки:
id - номер картинки.Код:let dropzoneSettings = { id: 1, mark: 'RPGMAKER', dropState: 'active' dropType: 'free' dropAfter: 'work' onDropCommonEventId: 35 } DKR.UsefulPictures.createDropZone(dropzoneSettings);
mark - текст в кавычках; метка, что бы активировать реацию дропзоны на попавшую в нее картинку (если у Полезной картинки другая метка, то дропзона не реагирует!).
dropState - 'active' или 'sleep'; текущее состояние дропзоны, 'active' - работае или 'sleep' - не работает (ЛУЧШЕ СРАЗУ ПИСАТЬ 'active', т.к. это поле внутренне!)
dropType - 'free' или 'lock'; действие дропзоны на картинку, после попадания последней в дропзону, 'free' - картинку можно перемещать или 'lock' - картинку больше перемещать нельзя.
dropAfter - 'work' или 'off'; изменение состояние дропзоны после попадания картинки, 'work' - дропзона остается рабочей или 'off' - дропзона больше не функционирует.
То есть, можно сделать дропзоны:
а) Блокирующие картинку после попадания на нее (или не блокирующие).
б) Выключающиеся после приема первой картинки (или принимающие много картинок).
в) Вызывающие Общее событие (или не вызывающие).
г) Также можно сделать дропзону, не активную после создания (и когда нужно, dropState сделать 'active').
Изменение настроек после создания:
Все вышеуказанные настройки можно менять вызовом скриптов.
DKR.UsefulPictures.updateUsefulPic(usefulPicId, listOfSettingsToUpdate) - для Полезных картинок.
DKR.UsefulPictures.updateDropZone(dropzoneId, listOfSettingsToUpdate) - для Дропзон.
usefulPicId и dropzoneId - номер картинки, выполняющей роль Полезной картинки или Дропзоны.
listOfSettingsToUpdate - массив настроек в формате [ ['имя настройки', 'новое значение'], ... , ['имя настройкиN', 'новое значениеN'] ]
Например для Полезной картинки(из демки):
...тут мы включаем ховер над картинкой №11 и задаем Общее событие, что будет вызываться при ховере.Код:DKR.UsefulPictures.updateUsefulPic(11, [ ['isHoverable', true], ['onHoverCommonEventId', 32] ]);
Например для Дропзоны(из демки):
...тут мы меняем тип реакции дропозны (сама дропзона - картинка под номером 45).Код:DKR.UsefulPictures.updateDropZone(45, [ ['dropType', 'lock'] ]);
Обратите внимание, т.к. в полезной картинке у нас написано mark: 'JS', а в дропзоне mark: 'RPGMAKER', то перемещение такой картинки в такую дропзону
не активирует событий ни в картинке, ни в дропзоне! mark (метка) должно совападать.
Поменять это можно в полезной картинке, или дропзоне, указав для изменения: ['mark', 'JS' (меняем в дропзоне) или 'RPGMAKER' (меняем в картинке)]
Удаление:
Удалить полезную картинку или дропзону можно командами:
DKR.UsefulPictures.deleteUsefulPic(usefulPicId); - для полезной картинки.
DKR.UsefulPictures.deleteDropZone(dropzoneId); - для дропзоны.
Удаление картинки командой мейкера НЕ УДАЛИТ ее из настроек плагина!
Спойлер Дополнительные возможности:Кроме настроек, есть еще несколько дополнительных возможностей.
Переключатель под номером movableSwitchId разрешает / запрещает передвигать картинки...может быть удобно для кат-сцен.
Для перемещения картинок должен быть включен!
Переключатель под номером defaultLRMCWorkSwitchId хранить состояние работы мыши и ВРУЧНУЮ ЕГО ПЕРЕКЛЮЧАТЬ НЕ НУЖНО!
Для включения или отключения работы плагина нужно использовать команды скрипта:
DKR.UsefulPictures.disableLRMC(); - включает работу плагина, отключая стандартной поведение мыши.
DKR.UsefulPictures.enableLRMC(); - выключает работу плагина, включая стандартной поведение мыши.
В переменные под номерами lastHoveredPicVarId, lastClickedPicVarId, lastMovedPicVarId, lastDroppedPicVarId, lastUsedDropzoneVarId записываются номера картинок,
с которыми последний раз был ховер, лкм, перемещение, помещение на дропзону а также номер дропзоны, куда последний раз поместили картинку.
В процессе игры можно в любой момент поменять Общее событие, что вызывается по ПКМ или клику на колёсико("МКМ"):
DKR.UsefulPictures.setCommonEventToRMC(ceId); - для ПКМ.
DKR.UsefulPictures.setCommonEventToMMC(ceId); - для МКМ.
Есть команды скриптов, для получение информации о пересечении полезных картинок и дропзон, что может быть полезно для логики игры:
DKR.UsefulPictures.isUsefulPicOnDropzones(usefulPi cId, logicOrIndex); - позволяет узнать, находится ли картинка с указаным номером хоть на какой-то дропзоне.
'logicOrIndex' можеть быть 'logic'(тогда возвращает true/false) или 'index' (возвращает номер картинки-дропзоны или -1, если нет результата).
DKR.UsefulPictures.isUsefulPicOnConcreteDropzone(u sefulPicId, dropzoneId); - если нужно узнать, находится ли опрделенная полезная картинка на конкретной дропзоне (возвращает true/false).
DKR.UsefulPictures.getUsefulPicsFromDropzone(dropz oneId); - если нужно вернуть перечень всех полезных картинок, что есть на определенной дропзоне (возвращает массив полезных картинок или пустой [], если нет результата).
Спойлер Заключение:Вышло многословно.
Наверное плагин сложен в настройке и использовании, но я хотел сделать как можно более универсальное и функциональное решение.
Получилось...что получилось.
Плагин работает ТОЛЬКО с компьютерной мышью! С геймпадом и тачскрином смартфона плагин не работает.
Социальные закладки