区域管理(一)
LUA实例应用:区域管理(一)
本课我们将学习区域管理的相关知识。我们会学习圆和球的生成方法,并设置圆心、球心和半径。我们还会学习区域动效的实现方法。
视频时间节点:
- 圆的生成:15:34
- 球的生成:22:31
- 区域动效:25:19
老师介绍:
区域动效
-- 生成一个面向上下方向的实心圆,参数是圆心坐标,半径和方块id
local function circle(x0, y0, z0, radius, blockid)
for x = x0 - radius, x0 + radius
do
for z = z0 - radius, z0 + radius
do
-- 获取两点距离
local result,distance=World:calcDistance({x=x0,y=y0,z=z0},{x=x,y=y0,z=z})
if(result == 1001)
then
Chat:sendSystemMsg("获取两点距离失败")
end
if(distance <= radius)
then
Block:replaceBlock(blockid, x, y0, z,0)
end
end
end
end
-- 生成一个实心球,参数是球心坐标,半径和方块id
local function ball(x0, y0, z0, radius, blockid)
for x = x0 - radius, x0 + radius
do
for z = z0 - radius, z0 + radius
do
for y = y0 - radius, y0 + radius
do
-- 获取两点距离
local result,distance=World:calcDistance({x=x0,y=y0,z=z0},{x=x,y=y,z=z})
if(result == 1001)
then
Chat:sendSystemMsg("获取两点距离失败")
end
if(distance <= radius)
then
Block:replaceBlock(blockid, x, y, z,0)
end
end
end
end
end
start_id, end_id = 666, 682
now_id = start_id
radius = 10
now_radius = 0
-- 游戏运行时运行
local function Game_Run()
circle(-265,6,256,now_radius,now_id)
now_radius = now_radius + 1
if(now_radius > radius)
then
now_radius = 0
now_id = now_id + 1
if(now_id > end_id)
then
now_id = start_id
end
end
end
-- 注册游戏运行监听器
ScriptSupportEvent:registerEvent([=[Game.Run]=], Game_Run)
生成球
-- 生成一个面向上下方向的实心圆,参数是圆心坐标,半径和方块id
local function circle(x0, y0, z0, radius, blockid)
for x = x0 - radius, x0 + radius
do
for z = z0 - radius, z0 + radius
do
-- 获取两点距离
local result,distance=World:calcDistance({x=x0,y=y0,z=z0},{x=x,y=y0,z=z})
if(result == 1001)
then
Chat:sendSystemMsg("获取两点距离失败")
end
if(distance <= radius)
then
Block:replaceBlock(blockid, x, y0, z,0)
end
end
end
end
-- 生成一个实心球,参数是球心坐标,半径和方块id
local function ball(x0, y0, z0, radius, blockid)
for x = x0 - radius, x0 + radius
do
for z = z0 - radius, z0 + radius
do
for y = y0 - radius, y0 + radius
do
-- 获取两点距离
local result,distance=World:calcDistance({x=x0,y=y0,z=z0},{x=x,y=y,z=z})
if(result == 1001)
then
Chat:sendSystemMsg("获取两点距离失败")
end
if(distance <= radius)
then
Block:replaceBlock(blockid, x, y, z,0)
end
end
end
end
end
-- 游戏开始时运行
local function Game_Start()
ball(-265, 50, 256, 30, 200)
end
-- 注册游戏开始监听器
ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_Start)
生成圆
-- 生成一个面向上下方向的实心圆,参数是圆心坐标,半径和方块id
local function circle(x0, y0, z0, radius, blockid)
for x = x0 - radius, x0 + radius
do
for z = z0 - radius, z0 + radius
do
-- 获取两点距离
local result,distance=World:calcDistance({x=x0,y=y0,z=z0},{x=x,y=y0,z=z})
if(result == 1001)
then
Chat:sendSystemMsg("获取两点距离失败")
end
if(distance <= radius)
then
Block:replaceBlock(blockid, x, y0, z,0)
end
end
end
end
-- 游戏开始时运行
local function Game_Start()
circle(-265, 6, 256, 100, 200)
end
-- 注册游戏开始监听器
ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_Start)