# 事件管理

按钮 做例子

    local button = class.button:builder
    {
        x = 300,
        y = 300,
        w = 64,
        h = 64,
        sync_key = 'only_one',  --选填 没填不会响应同步事件 sync_key 要唯一不重复
        keys = {'F2', 'ESC'}, --选填 绑定快捷键 只有其中的快捷键才会响应事件
    }

    function button:on_button_clicked()
        print('异步点击按钮事件', self)
    end

    function button:on_button_key_down(str)
        print('异步的按键事件', self, str)
    end

    --事件前缀改为on_sync 即可变成同步事件 并且第一个参数是为同步操作的玩家
    function button:on_sync_button_clicked(player)
        print('同步点击按钮事件', self, player)
    end

    function button:on_sync_button_key_down(player, str)
        print('同步的按键事件', self, player, str)
    end


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

当面板之上 有多个按钮 并且事件对应的操作相似的,例如 背包中会有多个按钮

可以由父控件来管理他的所有子控件事件

写一个按钮组做例子


local group_index = 0

class.group = extends(class.panel)
{
    new = function (parent, image, x, y, width, height, line, column)
        local max_width = (width + 10) * column
        local max_height = (height + 10) * line

        local panel = class.panel.new(parent,'', x, y, max_width, max_height)
        panel.__index = class.group

        group_index = group_index + 1

        local button_list = {}
        local i = 0
        for a = 1, line do
            for b = 1, column do
                local x = (width + 10) * (b - 1)
                local y = (height + 10) * (a - 1)

                local button = panel:add_button(image, x, y, width, height)
                button_list[i] = button
                button.slot_id = #button_list

                button.sync_key = 'group_' .. group_index .. '_' .. button.slot_id
            end
        end

        panel.button_list = button_list
        return panel
    end,


    --@ self: group 自身
    --@ button: 响应事件的按钮
    on_button_clicked = function (self,button)
        print('按钮异步点击',button, button.slot_id)
    end,

    --@ self: group 自身
    --@ button: 响应事件的按钮
    --@ player: 响应事件的玩家
    on_sync_button_clicked = function (self, button, player)
        print('按钮同步点击',button, button.slot_id)
    end,

}


--这样就会在0,0位置 创建一块 带有5 * 3 的数量的按钮 并且 每个按钮的大小是64*64
local group = class.group.create('button.blp', 0, 0, 64, 64, 5, 3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53