懒动行不行 发表于 2023-7-11 13:18:56

【搬运Wowpedia】事件Events(七)

本帖最后由 懒动行不行 于 2023-7-11 01:41 PM 编辑

Frame框架Frame(继承自Region和ScriptObject,用CreateFrame创建)提供了与用户交互、注册和响应游戏事件的基础。
其他类型的衍生小部件,如FontStrings、Textures 和Animations只能被附加到Frame或Frame的其他衍生工具上。
当一个插件需要响应游戏事件或状态变化而不需要可见组件时,这通常是使用Frame来完成的。显然,显示游戏信息(如威胁或冷却时间)且除了可拖动之外不能直接交互的组件就是典型的frame。它们也经常被用作组合其他相关框架的方法,要么是可见的(如天赋窗格将代表你角色天赋的按钮分组),要么是不可见的(如MultiBarRight将12个动作按钮分组)。已被定义的方法
事件
Frame:RegisterEvent(event) - 当事件发生时注册通知.
Frame:RegisterUnitEvent(event,unit1 [,unit2]) - 当事件适用到特定单位时注册通知.
Frame:RegisterAllEvents() - 注册这个框架用以接收所有时间 (仅调试用!)
Frame:UnregisterEvent(event) - 指示这个框架在事件发生时不再被通知.
Frame:UnregisterAllEvents() - 指示当任何事件发生时,这个框架都不应收到通知.
Frame:IsEventRegistered(event) - 如果事件被注册到这个框架,则返回 true .

位置 & 可见性

Frame:DesaturateHierarchy(desaturation)
Frame:DsableDrawLayer(layer) - 关闭指定的绘制层.
Frame:EnableDrawLayer(layer) - 开启指定的绘制层.
Frame:GetBoundsRect()
Frame:GetClampRectInsets() - 获取用于限制框架离开屏幕的修饰符.
Frame:GetDepth() - 如果适用,返回相对于其父节点的立体(3D)深度.
Frame:GetDontSavePosition()
Frame:GetEffectiveAlpha() - 返回框架的有效alpha值.
Frame:GetEffectiveDepth() - 返回绝对立体(3D)深度.
Frame:GetEffectivelyFlattensRenderLayers()
Frame:GetFlattensRenderLayers()
Frame:GetFrameLevel() - 返回该框架级别.
Frame:GetFrameStrata() - 返回该框架的层次.
Frame:GetHitRectInsets(l, r, t, b) - 获取框架的占据矩形的插入距离
Frame:GetMaxResize(w,h) - 返回框架允许的最大调整范围

Frame:GetMinResize(返回框架允许的最小调整范围
Frame:HasFixedFrameLevel() : 布尔型

Frame:HasFixedFrameStrata() : 布尔型
Frame:IgnoreDepth(ignoreFlag)
Frame:IsClampedToScreen() - 如果禁止将框架拖出屏幕,则返回.
Frame:IsIgnoringDepth()
Frame:IsToplevel([) - 如果框架被设置为顶层返回.
Frame:Lower() - 将这一框架置于其他框架下一层.
Frame:Raise() - 使这个框架在其他框架层级之上.Frame:RotateTextures(angleRadians [, pivotX, pivotY])
Frame:SetClampedToScreen(clamped) - 设置是否禁止框架帧拖出屏幕.
Frame:SetClampRectInsets(left, right, top, bottom) - 修改框架可能被拖出屏幕的程度.
Frame:SetDepth(depth) - 设置立体(3D)深度,如果适用,相对于它的父级.
Frame:SetDontSavePosition()
Frame:SetDrawLayerEnabled(layer, mouseOver)
Frame:SetFixedFrameLevel(bool)
Frame:SetFixedFrameStrata(bool)
Frame:SetFlattensRenderLayers(bool)
Frame:SetFrameBuffer(enabled) -控制框架是否呈现到它自己的框架缓冲区.
Frame:SetFrameLevel(level) - 将框架定位在其z轴间隔的一个细分内
Frame:SetFrameStrata(strata) -在z轴间隔内定位框架 .
Frame:SetHitRectInsets(left, right, top, bottom) - 设置框架占据矩形的插入距离.
Frame:SetMaxResize(maxWidth, maxHeight) - 设置此框架可调整为的最大尺寸.
Frame:SetMinResize(minWidth, minHeight) - 设置此框架可以调整大小的最小尺寸.
Frame:SetToplevel(isTopLevel) - 设置框架在点击时是否升起

子类
Frame:GetChildren() - 返回子框架作为多个返回值.
Frame:GetNumChildren() - 返回子框架的数目.
Frame:DoesClipChildren()
Frame:SetClipsChildren(clipped) - 设置框架裁剪其子类

区域
Frame:GetNumRegions() - 返回区域的数目.
Frame:GetRegions() - 返回区域.
Frame:CreateFontString() - 创建一个 FontString
Frame:CreateLine{) - 创建一个Line
Frame:CreateMaskTexture() - 创建一个 MaskTexture
Frame:CreateTexture() - Creates a Texture

用户输入
Frame:EnableKeyboard(enableFlag) - 是否接收键盘输入.
Frame:EnableMouse(enableFlag) - 是否接收鼠标输入.
Frame:EnableMouseWheel(enableFlag) - 是否接收鼠标滚轮通知.
Frame:GetHyperlinksEnabled()
Frame:GetPropagateKeyboardInput() - 如果键盘输入传播则返回.
Frame:IsKeyboardEnabled() - 如果接收到键盘输入则返回.
Frame:IsMouseClickEnabled([) - 如果接收到鼠标点击输入则返回.
Frame:IsMouseEnabled() - 如果接收到鼠标输入则返回.
Frame:IsMouseMotionEnabled() - 如果收到鼠标进入/悬停通知,返回.
Frame:IsMouseWheelEnabled() -如果收到鼠标滚轮通知则返回.
Frame:IsMovable() - 如果框架可以移动则返回。
Frame:IsResizable() - 如果可以调整框架的大小,则返回.
Frame:IsUserPlaced() - 如果此框架已被用户重新定位,则返回.
Frame:RegisterForDrag(buttonType[,buttonType...]) - 指示框架监视鼠标拖动.
Frame:SetHyperlinksEnabled()
Frame:SetMouseClickEnabled()
Frame:SetMouseMotionEnabled()
Frame:SetMovable(isMovable) - 是否应该移动框架.
Frame:SetPropagateKeyboardInput(propagate) - 是否将键盘输入传播到其他框架.
Frame:SetResizable(isResizable) - 是否应该调整框架的大小.
Frame:SetUserPlaced(isUserPlaced) - 框架是否在布局缓存中是用户定义的.
Frame:StartMoving() - 开始移动这个框架.
Frame:StartSizing(point) - 使用指定的锚点开始调整此框架的大小.
Frame:StopMovingOrSizing() -停止移动和/或调整此框架的大小.
Frame:EnableGamePadButton(enabled)
Frame:EnableGamePadStick(enabled)
Frame:IsGamePadButtonEnabled()
Frame:IsGamePadStickEnabled()

属性
Frame:GetAttribute(prefix, name, suffix) - 返回与给定模式匹配的属性的当前值.
Frame:SetAttribute(name, value) - 在框架上设置属性.
Frame:SetAttributeNoHandler(name, value) - 在不触发OnAttributeChanged 脚本处理程序的情况下设置框架上的属性.
Frame:ExecuteAttribute(name [, ...])
Frame:CanChangeAttribute()
Frame:GetID( )- 返回框架的ID.
Frame:SetID(id) - 为框架设置一个ID.
背景


背景API在9.0.1补丁中被移动到 BackdropTemplate

Frame:GetBackdrop() - 创建并返回一个背景表,适合SetBackdrop使用
Frame:GetBackdropBorderColor(r, g, b, a) - 获取框架的背景边框颜色
Frame:GetBackdropColor(r, g, b, a) - 获取框架的背景颜色
Frame:SetBackdrop() -根据提供的规格设置框架的背景.
Frame:SetBackdropBorderColor(r, g, b [, a]) - 设置框架背景边框的颜色
Frame:SetBackdropColor(r, g, b [, a]) - 设置框架的背景颜色。


已定义的脚本处理器
OnAttributeChanged(self, key, value) - 当框架属性改变时运行。
OnChar(self, text) - 对框架中键入的每个文本字符运行.
OnDisable(self) - 当框架被禁用时运行.
OnDragStart(self, button) - 当鼠标在框架中开始拖动时运行.
OnDragStop(self) -当在框架中开始拖动后释放鼠标按钮时运行,
OnEnable(self) - 当框架开启时运行.
OnEnter(self, motion) - 当鼠标光标进入框架的交互区域时运行.
OnEvent(self, event, ...) - 每当为该事件注册的事件触发时运行.
OnGamePadButtonDown
OnGamePadButtonUp
OnGamePadStickOnHide(self) - 当框架的可见性变为隐藏时运行.
OnHyperlinkClick(self, link, text, button, region, left, bottom, width, height) - 当鼠标单击FontInstance对象上的超链接时运行.
OnHyperlinkEnter(self, link, text, region, left, bottom, width, height) - 当鼠标移动到FontInstance对象上的超链接上时运行.
OnHyperlinkLeave(self) - 当鼠标从FontInstance对象上的超链接移开时运行.
OnKeyDown(self, key) - 当按下键盘键时运行,如果框架是键盘启用的.
OnKeyUp(self, key) - 当键盘键被释放时运行,如果框架是键盘启用的.
OnLeave(self, motion) -当鼠标光标离开框架的交互区域时运行.
OnMouseDown(self, button) - 当光标在框架上而按下鼠标按钮时运行.
OnMouseUp(self, button) - 当在框架中鼠标按下动作后释放鼠标按钮时运行.
OnMouseWheel(self, delta) - 当框架接收到鼠标滚轮滚动动作时运行.
OnReceiveDrag(self) - 当鼠标按钮在拖动到框架后被释放时运行.
OnShow(self) - 当框架变得可见时运行.OnSizeChanged(self, width, height) -当框架的大小改变时运行.
示例
用组件脚本((OnEnter 和OnLeave)创建一个简单的框架,以便在鼠标移到屏幕中间的纹理上时做出响应


local frame = CreateFrame("Frame", nil, UIParent)
frame:SetPoint("CENTER")
frame:SetSize(100,100)

-- 组件脚本
frame:SetScript("OnEnter", function()
      GameTooltip:SetOwner(frame, "ANCHOR_TOPRIGHT")
      GameTooltip:AddLine("HelloWorld!")
      GameTooltip:Show()
end)
frame:SetScript("OnLeave", function()
      GameTooltip:Hide()
end)

-- 添加一个纹理
local texture = frame:CreateTexture(nil, "BACKGROUND")
texture:SetTexture("interface\\icons\\inv_mushroom_11")
texture:SetAllPoints()

或者在XML文件中用<Frame> 元素
<Frame>
      <Size>
                <AbsDimension x="100" y="100" />
      </Size>
      <Anchors>
                <Anchor point="CENTER" />
      </Anchors>
      <Scripts>
                <OnEnter>
                        GameTooltip:SetOwner(self, "ANCHOR_TOPRIGHT")
                        GameTooltip:AddLine("HelloWorld!")
                        GameTooltip:Show()
                </OnEnter>
                <OnLeave>
                        GameTooltip:Hide()
                </OnLeave>
      </Scripts>
      <Layers>
                <Layer level="BACKGROUND">
                        <Texture file="interface\icons\inv_mushroom_11">
                              <Anchors>
                                        <Anchor point="TOPLEFT" />
                                        <Anchor point="BOTTOMRIGHT" />
                              </Anchors>
                        </Texture>
                </Layer>
      </Layers>
</Frame>补丁变更
[*]https://static.wikia.nocookie.net/wowpedia/images/9/9a/Shadowlands-Icon-Inline.png/revision/latest/scale-to-width-down/48?cb=20210930025728Patch 9.0.1 (2020-10-13): Backgrounds and borders replaced by BackdropTemplate

[*]https://static.wikia.nocookie.net/wowpedia/images/3/38/WoW_Icon_update.png/revision/latest?cb=20180602175550Patch 1.11.0 (2006-06-19): Frame became an extension of the new abstract class Region.

[*]https://static.wikia.nocookie.net/wowpedia/images/3/38/WoW_Icon_update.png/revision/latest?cb=20180602175550Patch 1.10.0 (2006-03-28): CreateFrame() added to construct frames in Lua during runtime.

[*]https://static.wikia.nocookie.net/wowpedia/images/3/38/WoW_Icon_update.png/revision/latest?cb=20180602175550Patch 1.1.0 (2004-11-07):    Included in the original World of Warcraft release using an XML constructor.


其他参见
[*]SecureTemplates - FrameXML模板安全管理组,raid和光环(buff)框架。
[*]FramePoolMixin - FrameXML框架池生成可重复用的框架。
[*]FramePoolCollectionMixin - FrameXML 框架池的集合,以产生可重复用的框架。



参考文献
[*]^ 2020-05-20,Backdrop.xml, version 9.0.1.34278, archived at Townlong-Yak
[*]^ https://static.wikia.nocookie.net/wowpedia/images/2/20/Blizz.gif/revision/latest?cb=20171007185539 Slouken 2006-05-12. Re: Upcoming 1.11 Changes - Concise List. Archived from the original
[*]^ Iriel 2005-12-28. Upcoming 1.10 Changes - Concise List. Archived from the original
[*]^ 2014-12-06,UI.xsd, version 1.1.2.4115, near line 307, archived at Townlong-Yak







haliluya 发表于 2023-10-23 10:18:54

不给个赞,简直说不过去,这么费心学习和分享
页: [1]
查看完整版本: 【搬运Wowpedia】事件Events(七)