Войти на сайт

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

ТЕМА: Нормальное выделение кнопок мышью

Нормальное выделение кнопок мышью 8 года 1 мес. назад #90149

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоОрганизатор конкурсовПроект месяца 1 местоВетеранПрограммист Ruby1 место в ГотвУчитель3 местоПроект месяца 2 место
MouseOverselect

Автор: DeadElf79
Версия: 1.3

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

Честно говоря, я без понятия, может быть, эту проблему уже решили ранее, но я не нашел ничего подобного. Если решение и так уже есть, то тему потом сам удалю, не страшно.

Код:
//=============================================================================
// MouseOverselect.js
//=============================================================================
 
/*:
 * @plugindesc Did you like need make double click to select buttons? If no, this plugin will help you
 * @version 1.3
 * @author DeadElf79
 *
 * @help This plugin does not provide plugin commands.
 */
 
var Imported = Imported || {};
Imported.De79_MouseOverselect = true;
 
(function() {
 
	// CORE
 
	/**
	 * [read-only] The x coordinate on the canvas area of the realtime mouse position.
	 *
	 * @static
	 * @property realtime_x
	 * @type Number
	 */
	Object.defineProperty(TouchInput, 'realtime_x', {
		get: function() {
			return this._realtime_x;
		},
		configurable: true
	});
 
	/**
	 * [read-only] The y coordinate on the canvas area of the realtime mouse position.
	 *
	 * @static
	 * @property realtime_y
	 * @type Number
	 */
	Object.defineProperty(TouchInput, 'realtime_y', {
		get: function() {
			return this._realtime_y;
		},
		configurable: true
	});
 
	var _onMouseMoveWithOnlyTouch = TouchInput._onMouseMove;
	TouchInput._onMouseMove = function(event) {
		// original
		_onMouseMoveWithOnlyTouch.call(this,event);
		//addition
		this._realtime_x = Graphics.pageToCanvasX(event.pageX);
        this._realtime_y = Graphics.pageToCanvasY(event.pageY);
	};
 
	// WINDOW
 
	Window.prototype.isMouseOver = function() {
		var x = this.canvasToLocalX(TouchInput.realtime_x);
		var y = this.canvasToLocalY(TouchInput.realtime_y);
		if (x + this.x < this.x || x + this.x > this.x + this.width ||
			y + this.y < this.y || y + this.y > this.y + this.height){
				return false;
		} else {
			return true;
		}
	};
 
	// WINDOW SELECTABLE
 
	Window_Selectable.prototype.update = function() {
		Window_Base.prototype.update.call(this);
		this.updateArrows();
		this.processCursorMove();
		this.processHandling();
		this.processWheel();
		this.processTouch();
		this.processMouseOverselect();
		this._stayCount++;
	};
 
	Window_Selectable.prototype.processMouseOverselect = function() {
		var x = this.canvasToLocalX(TouchInput.realtime_x);
		var y = this.canvasToLocalY(TouchInput.realtime_y);
		var hitIndex = this.hitTest(x, y);
		var mouseOver = this.isMouseOver();
		if (!mouseOver){
			this.select(-1);
		} else {
			if (typeof(hitIndex)!=='undefined'){
				if (hitIndex>-1){
					this.select(hitIndex);
				}
			}
		}
	};
 
	// WINDOW CHOICE LIST - COMPATIBILITY for GALV'S "VISUAL NOVEL CHOICES"
 
	if (Imported.Galv_VisualNovelChoices == true){
 
		Window_ChoiceList.prototype.update = function() {
			// DeadElf79's code
			this.processMouseOverselect();
			// Galv's code
			Galv.VNC.Window_ChoiceList_update.call(this);
			if (this._vnIndex != this._index) {
				this.refresh();
				this._vnIndex = this._index;
			}
		};
 
	}
 
	// SCENE TITLE - COMPATIBILITY for SOUL ULTIMATE TITLE SCREEN
	if (SOUL_MV != null){
 
		// in future versions...
	}
})();
Последнее редактирование: 7 года 2 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Cerberus, Seibur, Leprikon01, DK, Ren310, Демий, Astraslav

Нормальное выделение кнопок мышью 7 года 9 мес. назад #92616

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоОрганизатор конкурсовПроект месяца 1 местоВетеранПрограммист Ruby1 место в ГотвУчитель3 местоПроект месяца 2 место
Совершенно неожиданно взял да и обновил плагин, добавив отмену выбора пункта меню, если мышь находится не над окном выбора. Так что теперь можно лепить окошки с выбором поверх карты и они не будут мешать вам играть (в теории, еще не попробовал).

Код в шапке обновлен.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, Демий, Astraslav

Нормальное выделение кнопок мышью 7 года 9 мес. назад #92638

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоОрганизатор конкурсовПроект месяца 1 местоВетеранПрограммист Ruby1 место в ГотвУчитель3 местоПроект месяца 2 место
И вот последнее обновление. Оно чисто косметическое, ничего особо не изменилось. Если вы - обычный пользователь, то не нужно спешно обновляться.

Если же вы разбираетесь в плагинах, то обратите внимание на функцию isMouseOver, добавленную к классу Window, от которого растут ноги у всех окошек. Функция отслеживает, находится ли мышь над окном или нет. Эту функцию вы можете использовать из своих плагинов для собственных специфичных нужд)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Astraslav

Нормальное выделение кнопок мышью 7 года 8 мес. назад #92819

  • Astraslav
  • Astraslav аватар
  • Вне сайта
  • Мастер
  • Сообщений: 192
  • Спасибо получено: 158
  • Проект месяца 1 местоПроект месяца 2 местоПроект месяца 3 место
Эльф, а твой плагин совместим с меню YEP? А то у меня все работает нормально с мышью вплоть до захода во внутриигровое меню. После чего последнее виснет (ни мышь, ни клавиатура не помогают не то что посмотреть предметы или навыки, но даже банально выйти из меню уже не удается).

З.Ы. Попробовал отключить плагин YEP - не помогло.
Подпишись на официальный канал Светлой на ютубе: www.youtube.com/channel/UChoZ13z-eEEFg1n7yjrpTJQ
Последнее редактирование: 7 года 8 мес. назад от Astraslav.
Администратор запретил публиковать записи гостям.

Нормальное выделение кнопок мышью 7 года 8 мес. назад #92828

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоОрганизатор конкурсовПроект месяца 1 местоВетеранПрограммист Ruby1 место в ГотвУчитель3 местоПроект месяца 2 место
кинь демку с YEP и моим плагином, я хоть гляну. а то я ж чужие плагины не собираю, у меня нет ничего)
Администратор запретил публиковать записи гостям.

Нормальное выделение кнопок мышью 7 года 2 мес. назад #96387

  • DarkKel
  • DarkKel аватар
  • Вне сайта
  • Мастер
  • Сообщений: 173
  • Спасибо получено: 24
Похоже та же проблема с yep'ом. Половина кнопок не реагирует, а со временем и клавиатура офается...

Так же не работает с galv visual novell choices и некорректно работает с soul ultimate title screen (кнопки "активируются" при проведении мыши значительно ниже них).
Администратор запретил публиковать записи гостям.

Нормальное выделение кнопок мышью 7 года 2 мес. назад #96390

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоОрганизатор конкурсовПроект месяца 1 местоВетеранПрограммист Ruby1 место в ГотвУчитель3 местоПроект месяца 2 место
Ребят, соберите кто-нибудь демку с YEP и другими плагинами, с которыми этот плагин несовместим. Вы очень сильно поможете мне исправить ошибки, а себе - ускорить получение хорошего плагина)
Администратор запретил публиковать записи гостям.

Нормальное выделение кнопок мышью 7 года 2 мес. назад #96404

  • DarkKel
  • DarkKel аватар
  • Вне сайта
  • Мастер
  • Сообщений: 173
  • Спасибо получено: 24
Администратор запретил публиковать записи гостям.

Нормальное выделение кнопок мышью 7 года 2 мес. назад #96441

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Писатель 3 местоОрганизатор конкурсовПроект месяца 1 местоВетеранПрограммист Ruby1 место в ГотвУчитель3 местоПроект месяца 2 место
ДаркКел, спасибо за демку.

Нашлось свободное время, пока что сделал только фикс для совместимости с Galv's Visual Novel Choices.

Фикс для совместимости с Соул-Титульником пока не написан (под него выделил место в коде, пробовал разные подходы, но пока не понял, что вписать, оставил это место пустым), там происходит что-то неочевидное. Как будет еще время - доберусь и буду пробовать еще.

Сейчас обновлю код в топике.

Также не обнаружил никаких проблем с другими меню, о которых говорил Астраслав. Попросил бы демку с этими проблемами.
А, нет, нашел-таки. Тут дело в том, что во внутриигровом меню очень перестают обрабатываться кнопки, если выбрать "снаряжение" или что-то подобное, что требует после себя выбора героя из партии. Подумаю над этим.
Последнее редактирование: 7 года 2 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.

Нормальное выделение кнопок мышью 7 года 2 мес. назад #96448

  • DarkKel
  • DarkKel аватар
  • Вне сайта
  • Мастер
  • Сообщений: 173
  • Спасибо получено: 24
Возможно проще будет тебе самому написать плагин на "титульник", сразу совместимый с мышью? )
Администратор запретил публиковать записи гостям.

Нормальное выделение кнопок мышью 7 года 2 мес. назад #96456

  • sinder
  • sinder аватар
  • Вне сайта
  • Мастер
  • Сообщений: 159
  • Спасибо получено: 154
  • 2 место ГотвПрограммист JavaScript Проект месяца 2 местоРазработчик3 место Готв
Эльф, забей, не выделение пунктов в соуловом титульнике никак не связанно с твоим выделением мышью или с чьим бы то ни было. Сами пукты в плагине на спрайтовых кнопках, и с Window_Selectable связаны косвенно, чисто для проверки выбирает ли игрок пункты меню клавой или нет. Я бы на его месте просто не делал привязки к стандартной менюшке.

Само окно спрятано, но по всей видимости у него там ошибка в проверке, потому что если в настройках плагина не поставить Command Selectable true, что немного наркомания учитывая описание опции, то мышка будет ездить по скрытому меню, которое имеет стандартное расположение без этой опции, с твоим плагином или любым другим который делает тоже самое(да-да DarkKel, плагин TDDP_MouseSystemEx тоже работает, видать включить нужную опцию в нем и поставить его там же где и эльфовый, ниже соулового титульника, религия не позволяла или хотя бы описать что ты делал или не делал).

Соулу, по всей видимости, было не нужно выделение мышкой в плагине, т.е. с этим можно идти к автору и просить добавить. Но да ладно, я сделал небольшой быстроаддон для плагина соула, который будет работать как с эльфоплагином, так и с плагином от TDDP.
Основная проблема, что все три плагина трогают TouchInput._onMouseMove, а эльфовый спамит select(-1) через processMouseOverselect... Ну, мне вроде бы удалось все совместить.

Эльф, если хочешь то адаптируй этот адок получше и пихни к себе. Но как по мне, лучше было бы зачинщику написать автору титульника насчет выделения, а потом уже смотреть, после того как он это у себя решит, если решать вообще будет. Все же это больше со стороны соула дело, и он вполне активный и на мейкер еще не забил. Ну или писать универсальное выделение спрайтокнопок мышкой при наведении.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Ставить ниже всех плагинов на мышку и титульник.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Нормальное выделение кнопок мышью 7 года 2 мес. назад #96464

  • DarkKel
  • DarkKel аватар
  • Вне сайта
  • Мастер
  • Сообщений: 173
  • Спасибо получено: 24
MouseSystem (точнее - выделение через него) заработало при опускании в конец загрузки. Но он все равно не рабоатет с галвом. Хотя и не имеет проблемы с "зависанием" в меню и неработоспособностью с "там, где надо выбирать персонажа".

Насчет соуловского меню - оно не принципиально, если есть какой-либо адекватный аналог, который изначально будет работать "правильно".
Администратор запретил публиковать записи гостям.

Нормальное выделение кнопок мышью 7 года 2 мес. назад #96471

  • sinder
  • sinder аватар
  • Вне сайта
  • Мастер
  • Сообщений: 159
  • Спасибо получено: 154
  • 2 место ГотвПрограммист JavaScript Проект месяца 2 местоРазработчик3 место Готв
DarkKel пишет:
MouseSystem (точнее - выделение через него) заработало при опускании в конец загрузки. Но он все равно не рабоатет с галвом. Хотя и не имеет проблемы с "зависанием" в меню и неработоспособностью с "там, где надо выбирать персонажа".
Как бы, работает, у меня игра на этих двух плагинах построена. Галвовский должен быть попросту ниже за скрипт мышки, в менеждере плагинов .
Последнее редактирование: 7 года 2 мес. назад от sinder.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.258 секунд