看到一段代码,留个脚印

此代码是向一个frame添加一个按扭

--===========================================================================
-- 添加按扭
--===========================================================================
local MyButton = CreateFrame('Button')
MyButton:SetScript('OnEvent', function(self, event, ...) self[event](self, event, ...) end)

local function OnClick()
	ReloadUI()
    PlaySound("igMainMenuOption")
end


local function OnEnter(self)
	GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
	GameTooltip:AddLine("^_^")
	GameTooltip:Show()
end

function ReLoad_OnEnter(self)
	GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
	GameTooltip:AddLine("重载插件", 0, 1, 0)
	GameTooltip:Show()
end

local function OnLeave()
	GameTooltip:Hide()
end

function CreateButton(parent, width, height, point1, point2, point3)
	local f = CreateFrame('Button', nil, parent, 'UIPanelButtonTemplate')		
	
	f:SetWidth(width)
	f:SetHeight(height)
	f:SetPoint(point1, point2, point3)
	f:SetText("~_^", 0, 1, 0)
	f:SetScript('OnClick', OnClick)
	
	f:SetScript('OnEnter', OnEnter)
	f:SetScript('OnLeave', OnLeave)
	
	return f
end
function MyButton:PLAYER_LOGIN()
	MyButton:UnregisterEvent('PLAYER_LOGIN')
--	if IsAddOnLoaded('EN_UnitFrames') then
--	CreateButton(EUF_OptionFrame, 60, 20, 'CENTER', -30, -10)
	local mi = CreateFrame('Button', nil, EUF_OptionFrame, 'EUF_ButtonTemplate')
	mi:SetPoint('BOTTOM', -20, 20)
	mi:SetWidth(90)
	mi:SetHeight(24)
	mi:SetText("重 载")
	mi:SetScript("OnClick", function(self, ...)
--[[		ReloadUI()
		PlaySound("igMainMenuOption")]]
		mi:SetScript('OnClick', OnClick)
	end)
	
	mi:SetScript('OnEnter', ReLoad_OnEnter)		-- 等同于下面
	--[[mi:SetScript("OnEnter", function(self, ...)
		GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
		GameTooltip:AddLine("重新加载")
		GameTooltip:Show()
		ReLoad_OnEnter(self)		-- 这里要加参数 self 才有效
	end)]]
	mi:SetScript("OnLeave", function(self, ...)
		GameTooltip:Hide()
	end)
	
--	end
	MyButton:RegisterEvent('ADDON_LOADED')
end

MyButton:RegisterEvent('PLAYER_LOGIN')

  其实上面是一段 lua 代码,但是选择中没有 lua 选项,只有用 java代替了,效果如下:

 >>>>>>>>>>

 其实还有种方法是就是在 xml中加一段简单的代码:

<Button name="$parentRELOAD" inherits="EUF_ButtonTemplate" text="重载">
  <Anchors>
      <Anchor point="TOPRIGHT" relativeTo="$parentCONFIRM" relativePoint="TOPLEFT">
         <Offset>
             <AbsDimension x="-100" y="0"/>
         </Offset>
        </Anchor>
  </Anchors>
  <Scripts>	
    <OnClick>
      ReloadUI()
	 PlaySound("igMainMenuOption")
    </OnClick>
  </Scripts>	
</Button>

  效果和上面差不多。第一种方法中又有了两种方法建立一个按扭,一种是自己定义一个创建按扭的函数,然后建立一系统的函数,如鼠标移动按扭后鼠标提示函数,鼠标移开按扭后鼠标提示隐藏,按扭单击后的动作等等,这里的每一个函数都可以建多个自定义函数,如重载的鼠标提示函数:

function ReLoad_OnEnter(self) ...end

  又如 控制面板 的鼠标提示函数

function Option_OnEnter() ... end

  等等……,鼠标提示按扭的单击动作

function ReLoad_OnClick(self) ... end

  打开控制面板按扭的单击动作

function Option_OnClick(self) ... end

  鼠标离开按扭后的动作都一样,因此就只需要一个函数。

然后如果用 CreatButton 函数传入的参数有框体、建立按扭长、宽、坐标,而此函数里又有鼠标移到按扭及离开按扭和单击按扭的动作代码,也就是说用 CreatButton 建立的按扭动作全部都是一样的,但我们有时会有不同的鼠标提示和单击动作,因此我们就用第二种方法建立框体

local mi = CreateFrame('Button', nil, EUF_OptionFrame, 'EUF_ButtonTemplate')
  mi:SetPoint('BOTTOM', -20, 20)
  mi:SetWidth(90)
  mi:SetHeight(24)
  mi:SetText("重 载")

  鼠标的动作(鼠标移到按扭、单击)又有两种实现方法,一种是直接把代码写到下面,如下面

mi:SetScript("OnClick", function(self, ...)
    ReloadUI()
    PlaySound("igMainMenuOption")   -- 这里按键的声音
end)

  另一种方法是调用上面的 function ReLoad_OnClick(self) 函数

mi:SetScript("OnClick", function(self, ...)
    ReLoad_OnClick(self)
end)

  还有一种方法

mi:SetScript('OnClick', ReLoad_OnClick)

OnClick:为触发类型. 即事件触发. 常见的还有OnEnter OnLeave OnMouseDown OnUpdate OnEven,后面的 ReLoad_OnClick 是函数调用

今天是阴历12月28日,再过两天就过年了,该收拾收东西准备去宿舍了,先写到这里

猜你喜欢

转载自www.cnblogs.com/hsoftk/p/12229774.html