Добавлен Survivalist
Возможно ли сделать определённую зону для курсора где можно запретить например вывод текста при нажатии на лкм.
Принятый ответ
я уже написал в своей статье. но мы не читаем конечно
вот
--чекаем принадлежность курсора в игровом поле
local cursorInGame = true
TimerStart(CreateTimer(),0.0, false,function()
local parent = BlzGetFrameByName("ConsoleUIBackdrop", 0)
local gameUI = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
--DestroyTimer(GetExpiredTimer())
--Screen - родитель игрового поля (т.е. экрана)
local Screen = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
--левая центральная
local ScreenFrame1 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
BlzFrameSetAlpha(ScreenFrame1, 50)
BlzFrameSetAbsPoint(ScreenFrame1, FRAMEPOINT_CENTER, 0.1,0.154+((0.416)/2))
BlzFrameSetSize(ScreenFrame1, 0.2, 0.416)
--центральная игровая
local ScreenFrame2 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
BlzFrameSetAlpha(ScreenFrame2, 50)
BlzFrameSetAbsPoint(ScreenFrame2, FRAMEPOINT_CENTER, 0.4,0.128+((0.442)/2))
BlzFrameSetSize(ScreenFrame2, 0.4, 0.442)
--правая центральная игровая
local ScreenFrame3 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
BlzFrameSetAlpha(ScreenFrame3, 50)
BlzFrameSetAbsPoint(ScreenFrame3, FRAMEPOINT_CENTER, 0.7,0.154+((0.416)/2))
BlzFrameSetSize(ScreenFrame3, 0.2, 0.416)
--левая боковая игровая
local ScreenFrame4 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
BlzFrameSetAlpha(ScreenFrame4, 50)
BlzFrameSetAbsPoint(ScreenFrame4, FRAMEPOINT_CENTER, -0.144/2,(0.164+0.410)/2)
BlzFrameSetSize(ScreenFrame4, 0.144, 0.164+0.410)
--правая боковая игровая
local ScreenFrame5 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", Screen, "ScriptDialogButton", 0)
BlzFrameSetAlpha(ScreenFrame5, 50)
BlzFrameSetAbsPoint(ScreenFrame5, FRAMEPOINT_CENTER, 0.8+0.144/2,(0.164+0.410)/2)
BlzFrameSetSize(ScreenFrame5, 0.144, 0.164+0.410)
--Sreentools - всплывающая подсказка-пустышка
local Sreentools = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
BlzFrameSetAlpha(Sreentools, 0)
BlzFrameSetAbsPoint(Sreentools, FRAMEPOINT_BOTTOMLEFT, 0, 0)
BlzFrameSetSize(Sreentools, 0, 0)
BlzFrameSetTooltip(ScreenFrame1, Sreentools)
BlzFrameSetTooltip(ScreenFrame2, Sreentools)
BlzFrameSetTooltip(ScreenFrame3, Sreentools)
BlzFrameSetTooltip(ScreenFrame4, Sreentools)
BlzFrameSetTooltip(ScreenFrame5, Sreentools)
--InterfaceField - родитель интерфейса
local InterfaceField = BlzCreateFrameByType("FRAME", "FaceFrame", gameUI, "", 0)
--левая нижняя панель
local Interface1 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
BlzFrameSetAlpha(Interface1, 50)
BlzFrameSetAbsPoint(Interface1, FRAMEPOINT_CENTER, 0.1, 0.144/2)
BlzFrameSetSize(Interface1, 0.2, 0.154) --0.176
--центральная панель
local Interface2 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
BlzFrameSetAlpha(Interface2, 50)
BlzFrameSetAbsPoint(Interface2, FRAMEPOINT_CENTER, 0.4, 0.118/2)
BlzFrameSetSize(Interface2, 0.4, 0.128) --0.15
--правая нижняя панель
local Interface3 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", InterfaceField, "ScriptDialogButton", 0)
BlzFrameSetAlpha(Interface3, 50)
BlzFrameSetAbsPoint(Interface3, FRAMEPOINT_CENTER, 0.7, 0.146/2)
BlzFrameSetSize(Interface3, 0.2, 0.154) --0.176
--верхняя панель
local Interface4 = BlzCreateFrameByType("GLUETEXTBUTTON", "MyButton", parent, "ScriptDialogButton", 0)
BlzFrameSetAlpha(Interface4, 50)
BlzFrameSetAbsPoint(Interface4, FRAMEPOINT_CENTER, 0.4, 0.6-(0.026/2))
BlzFrameSetSize(Interface4, 1.088, 0.026) --0.176
--Interfacetools - всплывающая подсказка поля интерфейса
local Interfacetools = BlzCreateFrameByType("FRAME", "FaceFrame", parent, "", 0)
BlzFrameSetAlpha(Interfacetools, 0)
BlzFrameSetAbsPoint(Interfacetools, FRAMEPOINT_BOTTOMLEFT, 0, 0)
BlzFrameSetSize(Interfacetools, 0, 0)
BlzFrameSetTooltip(Interface1, Interfacetools)
BlzFrameSetTooltip(Interface2, Interfacetools)
BlzFrameSetTooltip(Interface3, Interfacetools)
BlzFrameSetTooltip(Interface4, Interfacetools)
TimerStart(CreateTimer(),1/32, true,function()
if BlzFrameIsVisible(Sreentools) then
print("курсор в игровом поле")
BlzFrameSetVisible(ScreenFrame1,false)
BlzFrameSetVisible(ScreenFrame2,false)
BlzFrameSetVisible(ScreenFrame3,false)
BlzFrameSetVisible(ScreenFrame4,false)
BlzFrameSetVisible(ScreenFrame5,false)
BlzFrameSetVisible(InterfaceField,true)
if GetLocalPlayer() ~= nil then
cursorInGame = true
end
elseif BlzFrameIsVisible(Interfacetools) or BlzFrameIsVisible(BlzGetOriginFrame(ORIGIN_FRAME_UBERTOOLTIP,0)) then
print("курсор в поле интерфейса")
BlzFrameSetVisible(ScreenFrame1,true)
BlzFrameSetVisible(ScreenFrame2,true)
BlzFrameSetVisible(ScreenFrame3,true)
BlzFrameSetVisible(ScreenFrame4,true)
BlzFrameSetVisible(ScreenFrame5,true)
BlzFrameSetVisible(InterfaceField,false)
if GetLocalPlayer()~=nil then
cursorInGame = false
end
end
карта немного старая, тут портрета нет. посмотри в моим вопросах, где вопрос недавно задавал про портрет
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. MpW
Ее можно попробовать скрыть. За всплывающие подсказки отвечают ORIGIN_FRAME_TOOLTIP и ORIGIN_FRAME_UBERTOOLTIP
f0 = BlzGetOriginFrame(ORIGIN_FRAME_TOOLTIP ,0)
f1 = BlzGetOriginFrame(ORIGIN_FRAME_UBERTOOLTIP,0)
BlzFrameSetVisible(f0,true)
BlzFrameSetVisible(f1,true)
Можно создать каждому фрейму всплывающую подсказку. Tooltips будут у нас невидимыми пустышками, они нужны для проверки. Когда курсор оказывается внутри фрейма, то подсказка становится видимой. Таймером чекаем подсказки. Можно разбить экран на несколько частей.
чтобы курсор не выходил за пределы есть спец нативка, привязывающая курсор к фрейму
---@param frame framehandle
---@param enable boolean
---@return nothing
function BlzFrameCageMouse(frame, enable) end -- (native)
Ред. MpW
Ред. MpW
Ред. MpW
Есть события у фреймов, которые ловят вход в фрейм/выход из фрейма - они не работают так хорошо как хотелось бы. Там обновляется событие медленно. Можно мышью крутануть в конец экрана, и все, у тебя курсор не внутри фрейма, событие может не зафиксировать вход/выход. Только если очень медленно подводить курсор. вО-ВТОРЫХ, ЕСЛИ КРУТАНУТЬ СИЛЬНО. И КУРСОР ОКАЖЕТСЯ ВНУТРИ, то событие не фиксируется, что мышь внутри, только входы/выходы. В-третьих, не все типы фреймов могут иметь нужными событиями.