# 聊天弹幕
聊天弹幕 聊天的时候 往屏幕上飘过一条弹幕消息
内置 japi 解锁了 魔兽 frame 控件锁定在屏幕内的限制, 可以随意移出屏幕外。
演示如下:
local jass = require 'jass.common'
local slk = require 'jass.slk'
--弹幕在屏幕的时间
local time = 10
local function barrage(handle, text, art)
local start = {
x = 1920,
y = math.random(0, 1080), --魔兽随机数 切记不要异步调用
}
--创建ui控件
local panel = class.panel:builder
{
x = start.x,
y = start.y,
w = 32,
h = 32,
normal_image = art, --图标
text = {
type = 'text',
x = 38,
w = 200,
text = jass.GetPlayerName(handle) .. ': '.. text, --文本
align = 'left',
font_size = 18,
}
}
local speed = 1920 / time / 60
--渲染帧计时器 1秒60帧 16毫秒的间隔
game.tick.loop(16, function (t)
start.x = start.x - speed
--刷新位置
panel:set_position(start.x, start.y)
--超出屏幕一段距离后 计时器跟ui一起删除。
if start.x + 300 < 0 then
t:remove()
panel:destroy()
end
end)
end
local group = jass.CreateGroup()
--获取单位图标
local function get_art(unit)
if unit == nil or unit == 0 then
return ''
end
local data = slk.unit[jass.GetUnitTypeId(unit)]
if data == nil then
return ''
end
return data.art
end
--玩家聊天的时候 选取单位组 拿到他的英雄图标 之后发送弹幕
ac.game:event '玩家-聊天' (function (_, player, str)
jass.GroupClear(group)
jass.GroupEnumUnitsOfPlayer(group, player.handle, nil)
local unit = FirstOfGroup(group)
--发送弹幕
barrage(player.handle, str, get_art(unit))
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
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78