文字板管理
LUA实例应用:文字板管理
本课我们将学习文字板管理的相关知识。文字板接口除了显示文字之外,还可以显示箭头,线和面。
视频时间节点:
- 显示进度条:15:29
- 显示箭头:22:43
- 显示线面:29:38
老师介绍:
显示箭头
player_list = {}
safe_pos = {}
-- 有玩家进入游戏时运行
local function Game_AnyPlayer_EnterGame(event)
player_list[#player_list + 1] = event.eventobjid
end
-- 游戏运行时运行
local function Game_RunTime(event)
if(event.second%30 == 1)
then
-- 停止特效
for i = 0, 100
do
World:stopEffectOnPosition(safe_pos.x,i,safe_pos.z,1293)
end
-- 生成安全点
local result, areaid = Area:createAreaRect({x=-10,y=62,z=230}, {x=50,y=0,z=50})
if(result == 1001)
then
Chat:sendSystemMsg("创建区域失败")
end
result, safe_pos = Area:getRandomPos(areaid)
if(result == 1001)
then
Chat:sendSystemMsg("获取随机位置失败")
end
for i = 0, 100
do
World:playParticalEffect(safe_pos.x,i,safe_pos.z,1293,1)
end
for k,v in pairs(player_list)
do
-- 显示箭头
local x,y,z=safe_pos.x,safe_pos.y,safe_pos.z--指向坐标
local size=0.5--箭头大小
local color=0xff0000--箭头颜色
local id=1--箭头数据编号
--创建一个指向位置的箭头数据
local info=Graphics:makeGraphicsArrowToPos(x, y, z, size, color, id)
local objid=v--在玩家身上创建
local dir={x=0,y=10,z=0}--偏移方向
local offset=10--偏移距离
--在生物身上创建指向坐标的箭头
Graphics:createGraphicsArrowByActorToPos(objid, info, dir, offset)
end
elseif(event.second%30 == 29)
then
-- 击败安全点外的玩家
for k,v in pairs(player_list)
do
local result,x,y,z = Actor:getPosition(v)
if(not(math.abs(safe_pos.x-x)<1 and math.abs(safe_pos.z-z)<1))
then
Actor:killSelf(v)
end
end
-- 停止特效
for i = 0, 100
do
World:stopEffectOnPosition(safe_pos.x,i,safe_pos.z,1293)
end
elseif(event.second%30 >= 2 and event.second%30 <= 29)
then
-- 倒数
Chat:sendSystemMsg(tostring(29-event.second%30))
end
end
-- 注册有玩家进入游戏监听器
ScriptSupportEvent:registerEvent([=[Game.AnyPlayer.EnterGame]=], Game_AnyPlayer_EnterGame)
-- 注册游戏运行到N秒监听器
ScriptSupportEvent:registerEvent([=[Game.RunTime]=], Game_RunTime)
显示进度条
-- 设置榨汁机不可破坏
Block:setBlockSettingAttState(3998, 1, false)
-- 玩家点击方块时运行
local function Player_ClickBlock(event)
if(event.blockid == 3998)
then
local v1=50--进度条当前值
local v2=100--进度条最大值
local color=0xff34b3--进度条的颜色
local itype=1--进度条编号
--创建一个进度条信息,存到graphicsInfo中
local graphicsInfo=Graphics:makeGraphicsProgress(v1, v2, color, itype)
local x,y,z=event.x,event.y+1,event.z--显示进度条的坐标
local x2,y2=0,0--水平偏移距离
--在位置上显示进度条
local result,graphid = Graphics:createGraphicsProgressByPos(x, y, z, graphicsInfo, x2, y2)
if(result == 1001)
then
Chat:sendSystemMsg("显示进度条失败")
end-- 设置榨汁机不可破坏
Block:setBlockSettingAttState(3998, 1, false)
-- 玩家点击方块时运行
local function Player_ClickBlock(event)
if(event.blockid == 3998)
then
local v1=50--进度条当前值
local v2=100--进度条最大值
local color=0xff34b3--进度条的颜色
local itype=1--进度条编号
--创建一个进度条信息,存到graphicsInfo中
local graphicsInfo=Graphics:makeGraphicsProgress(v1, v2, color, itype)
local x,y,z=event.x,event.y+1,event.z--显示进度条的坐标
local x2,y2=0,0--水平偏移距离
--在位置上显示进度条
local result,graphid = Graphics:createGraphicsProgressByPos(x, y, z, graphicsInfo, x2, y2)
if(result == 1001)
then
Chat:sendSystemMsg("显示进度条失败")
end
end
end
-- 注册玩家点击方块监听器
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], Player_ClickBlock)
end
end
-- 注册玩家点击方块监听器
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], Player_ClickBlock)