【脚本】一个自动循环画按钮的脚本,并且实现抽屉效果

把MainRightTop.lua放到GUILayout就可以用了

一共做了3排按钮可以直接写数量

改一下对应按钮的路径就可以了,有2个地方要改一个是默认的 一个是收起的 就是类似这些 icon1_1

要配置红点就是主界面右 按钮id就是icon1_1

icon1_1 代表 第1行 第1个按钮
icon1_2 代表 第1行 第2个按钮

icon2_1 代表 第2行 第1个按钮

以此类推....

QF脚本

[@Message_99]
#if
#act
sendmsg 6 前端传过来的自定义的消息头:<$CUSTMSGPARAM>

#if
EQUAL <$CUSTMSGPARAM> 图标1
#act
sendmsg 6 执行图标1
break

#if
EQUAL <$CUSTMSGPARAM> 图标2
#act
sendmsg 6 执行图标2
break

MainRightTop.lua


MainRightTop = {}

function MainRightTop.main()
    local parent = GUI:Attach_RightTop()
	local Layout_0 = GUI:Layout_Create(parent, "Layout_0", -730, -200, 560, 210, false)
	local Layout_1 = GUI:Layout_Create(parent, "Layout_1", -730, -200, 560, 210, false)

		GUI:setVisible(Layout_1, false)
		GUI:Timeline_MoveTo(Layout_1, {x=-730,y=0}, 0.2)

		local iconWidth = 70
		local iconHeight = 70
		local iconPaddingX = -5  -- 图标之间的水平间隔
		local iconPaddingY = -5  -- 图标之间的垂直间隔
		local numRows = 3  -- 图标的行数
		local startX = 1  -- 起始x坐标
		local startY = 1  -- 起始y坐标

		-- 每排图标的列数
		local numCols = {
			7,  -- 第一排图标个数
			4,  -- 第二排图标个数
			4   -- 第三排图标个数
		}
		
		local IconData = {
			icon1_1 = {notes = "图标1" , path = "res/icon/icon1_1.png"},
			icon1_2 = {notes = "图标2" , path = "res/icon/icon1_1.png"},
			icon1_3 = {notes = "图标3" , path = "res/icon/icon1_1.png"},
			icon1_4 = {notes = "图标4" , path = "res/icon/icon1_1.png"},
			icon1_5 = {notes = "图标4" , path = "res/icon/icon1_1.png"},
			icon1_6 = {notes = "图标4" , path = "res/icon/icon1_1.png"},
			icon1_7 = {notes = "图标4" , path = "res/icon/icon1_1.png"},
			
			icon2_1 = {notes = "图标5" , path = "res/icon/icon1_1.png"},
			icon2_2 = {notes = "图标6" , path = "res/icon/icon1_1.png"},
			icon2_3 = {notes = "图标7" , path = "res/icon/icon1_1.png"},
			icon2_4 = {notes = "图标8" , path = "res/icon/icon1_1.png"},
			
			icon3_1 = {notes = "图标9" , path = "res/icon/icon1_1.png"},
			icon3_2 = {notes = "图标10" , path = "res/icon/icon1_1.png"},
			icon3_3 = {notes = "图标11" , path = "res/icon/icon1_1.png"},
			icon3_4 = {notes = "图标12" , path = "res/icon/icon1_1.png"},
		}

		-- -- 循环创建图标
		for row = 1, numRows do
			local currentNumCols = numCols[row]
			for col = 1, currentNumCols do
				local iconX = 450 - (startX + (iconWidth + iconPaddingX) * (col - 1)) ---数字约大越往右靠
				local iconY = startY + (iconHeight + iconPaddingY) * (numRows - row)
				local iconName = "icon" .. row .. "_" .. col
				local path = IconData[iconName].path
				-- 创建图标,使用 iconX 和 iconY 作为左上角坐标
				local button = GUI:Button_Create(Layout_0, iconName, iconX, iconY, path)
				GUI:addOnClickEvent(button, function () SL:SendNetMsg(99, 0, 0, 0, IconData[iconName].notes) ;  end)
			end
		end

			-- 每排图标的列数
		local numCols_1 = {
			4,  -- 第一排图标个数
			2,  -- 第二排图标个数
			0   -- 第三排图标个数
		}
		
		local IconData_1 = {
			icon1_1 = {notes = "图标1" , path = "res/icon/icon1_1.png"},
			icon1_2 = {notes = "图标2" , path = "res/icon/icon1_1.png"},
			icon1_3 = {notes = "图标3" , path = "res/icon/icon1_1.png"},
			icon1_4 = {notes = "图标4" , path = "res/icon/icon1_1.png"},
			icon2_1 = {notes = "图标5" , path = "res/icon/icon1_1.png"},
			icon2_2 = {notes = "图标6" , path = "res/icon/icon1_1.png"},
		}

		-- -- 循环创建图标
		for row = 1, numRows do
			local currentNumCols = numCols_1[row]
			for col = 1, currentNumCols do
				local iconX = 450 - (startX + (iconWidth + iconPaddingX) * (col - 1)) ---"450"数字约大越往右靠
				local iconY = startY + (iconHeight + iconPaddingY) * (numRows - row)
				local iconName = "icon" .. row .. "_" .. col
				local path = IconData_1[iconName].path
				-- 创建图标,使用 iconX 和 iconY 作为左上角坐标
				local button = GUI:Button_Create(Layout_1, iconName, iconX, iconY, path)
				GUI:addOnClickEvent(button, function () SL:SendNetMsg(99, 0, 0, 0, IconData_1[iconName].notes) ;  end)
			end
		end
		


	---调试用代码
	--GUI:Layout_setBackGroundColor(Layout_0, "#000000")
	--GUI:Layout_setBackGroundColorType(Layout_0, 1)
	--GUI:Layout_setBackGroundColor(Layout_1, "#000000")
	--GUI:Layout_setBackGroundColorType(Layout_1, 1)
	local Button = GUI:Button_Create(parent, "Button", -220, -45, "res/icon/0_1.png") --收起按钮 x 越小-越右 y越小-越上

	GUI:addOnClickEvent(Button, function()
		if GUI:getVisible(Layout_0) == true then
			GUI:Timeline_MoveTo(Layout_0, {x=-730,y=0}, 0.2, function ()
				GUI:setVisible(Layout_0, false)
				GUI:setVisible(Layout_1, true)
				GUI:Timeline_MoveTo(Layout_1, {x=-730,y=-200}, 0.2)
				GUI:Button_loadTextureNormal(Button, "res/icon/0_2.png")
			end)
		else
			GUI:Timeline_MoveTo(Layout_1, {x=-730,y=0}, 0.2, function ()
				GUI:setVisible(Layout_0, true)
				GUI:setVisible(Layout_1, false)
				GUI:Timeline_MoveTo(Layout_0, {x=-730,y=-200}, 0.2)
				GUI:Button_loadTextureNormal(Button, "res/icon/0_1.png")
			end)
        end
    end)

end

 

感谢996官方论坛:vweilai分享
下载地址
百度云盘
提取码:4f75
THE END