首页
课程中心
LUA实例应用
方块管理(二)
方块管理(二)
小燕 更新时间: 2022-08-25 11:21:06

LUA实例应用:方块管理(二)

本课将会继续学习方块管理接口的相关知识。首先,我们会学习设置方块属性的接口,利用这个接口,我们可以设置某种类型的方块不能被破坏。我们还会编写自动放置电路方块的脚本,利用开关的自动控制机制,制作一个脚本电梯

 

视频时间节点:

  • 方块属性设置:08:47
  • 方块应用:10:58
  • 开关自动控制:22:33

 

老师介绍:

 
脚本电梯
now_floor = 1

--用漂浮文字不断显示楼层
local function Game_RunTime(event)
    if (event.second % 1 == 0)
    then
        local result, x, y, z = Actor:getPosition(0)
        local result = Graphics:makeflotageText("#R第"..tostring(math.floor((y - 6) / 7 + 1)).."层", 100, 1)
        local result = Graphics:createflotageTextByPos(x, y, z, result)
    end
end

-- 玩家发送聊天消息时运行
local function Player_NewInputContent(event)
    local _, _, end_floor = string.find(event.content, "我要去(%d+)楼")
    end_floor = tonumber(end_floor)
    --现在的楼层等于要去的楼层
    if(now_floor == end_floor)
    then
        Chat:sendSystemMsg("你已经在"..tostring(end_floor).."楼")
    --现在的楼层小于要去的楼层
    elseif(now_floor < end_floor)
    then
        --清除电梯和楼层的连接
        Block:destroyBlock(-40,now_floor*7,203,false)
        Block:destroyBlock(-41,now_floor*7,203,false)
        Block:destroyBlock(-42,now_floor*7,203,false)
        --电梯低于目的地时,持续上升
        while(now_floor < end_floor)
        do
            --柱子
            for y = now_floor*7+1, now_floor*7+6
            do
                Block:destroyBlock(-39,y,201,false)
                Block:placeBlock(1123, -39, y, 201,0)
            end
            --标记器负极
            Block:destroyBlock(-39,now_floor*7+7,201,false)
            Block:placeBlock(1004, -39, now_floor*7+7, 201,0)
            --滑动方块
            Block:destroyBlock(-38,now_floor*7+7,201,false)
            Block:placeBlock(1008, -38, now_floor*7+7, 201,0)
            --开关
            Block:destroyBlock(-37,now_floor*7+7,201,false)
            Block:placeBlock(724, -37, now_floor*7+7, 201,0)
            Block:setBlockSwitchStatus({x=-37,y=now_floor*7+7,z=201},true)
            --等待电梯停稳
            local is_run = true
            while(is_run)
            do
                local result,id=Block:getBlockID(-41,now_floor*7+7,201)
                if(result == 1001)
                then
                    Chat:sendSystemMsg("获取方块id失败")
                end
                if(id == 1123)
                then
                    is_run = false
                end
                threadpool:wait(0.1)
            end
            threadpool:wait(0.8)
            --清除开关
            Block:destroyBlock(-37,now_floor*7+7,201,false)
            --清除滑动方块
            Block:destroyBlock(-38,now_floor*7+7,201,false)
            --层数加一
            now_floor = now_floor + 1
            --清除柱子和标记器负极
            for y = now_floor*7+1, now_floor*7+7
            do
                Block:destroyBlock(-39,y,201,false)
            end
        end
        --放置连接处
        Block:placeBlock(1123, -40,now_floor*7,203,0)
        Block:placeBlock(1123, -41,now_floor*7,203,0)
        Block:placeBlock(1123, -42,now_floor*7,203,0)
    --现在的楼层大于要去的楼层
    elseif(now_floor > end_floor)
    then
        Block:destroyBlock(-40,now_floor*7,203,false)
        Block:destroyBlock(-41,now_floor*7,203,false)
        Block:destroyBlock(-42,now_floor*7,203,false)
        while(now_floor > end_floor)
        do
            for y = now_floor*7-1, now_floor*7-6, -1
            do
                Block:destroyBlock(-39,y,201,false)
                Block:placeBlock(1123, -39, y, 201,0)
            end
            Block:destroyBlock(-39,now_floor*7-7,201,false)
            Block:placeBlock(1004, -39, now_floor*7-7, 201,0)
            Block:destroyBlock(-38,now_floor*7-7,201,false)
            Block:placeBlock(1008, -38, now_floor*7-7, 201,0)
            Block:destroyBlock(-37,now_floor*7-7,201,false)
            Block:placeBlock(724, -37, now_floor*7-7, 201,0)
            Block:setBlockSwitchStatus({x=-37,y=now_floor*7-7,z=201},true)
            local is_run = true
            while(is_run)
            do
                local result,id=Block:getBlockID(-41,now_floor*7-7,201)
                if(result == 1001)
                then
                    Chat:sendSystemMsg("获取方块id失败")
                end
                if(id == 1123)
                then
                    is_run = false
                end
                threadpool:wait(0.1)
            end
            threadpool:wait(0.8)
            Block:destroyBlock(-37,now_floor*7-7,201,false)
            Block:destroyBlock(-38,now_floor*7-7,201,false)
            now_floor = now_floor - 1
            for y = now_floor*7-1, now_floor*7-7, -1
            do
                Block:destroyBlock(-39,y,201,false)
            end
        end
        Block:placeBlock(1123, -40,now_floor*7,203,0)
        Block:placeBlock(1123, -41,now_floor*7,203,0)
        Block:placeBlock(1123, -42,now_floor*7,203,0)
    end
end 

--注册游戏开始监听器
ScriptSupportEvent:registerEvent([=[Game.Start]=], Game_Start)
--注册游戏时间N秒监听器
ScriptSupportEvent:registerEvent([=[Game.RunTime]=],Game_RunTime)
-- 注册玩家发送聊天消息监听器
ScriptSupportEvent:registerEvent([=[Player.NewInputContent]=], Player_NewInputContent)
课程目录
共50节
1 事件系统
2 世界事件
3 游戏逻辑事件
4 玩家事件(一)
5 玩家事件(二)
6 玩家事件(三)
7 玩家事件(四)
8 生物事件
9 方块与道具事件
10 世界管理(一)
11 世界管理(三)
12 世界管理(二)
13 方块管理(一)
14 方块管理(二)
15 Actor管理(一)
16 Actor管理(二)
17 Actor管理(三)
18 玩家管理(一)
19 玩家管理(二)
20 生物管理
21 区域管理(一)
22 区域管理(二)
23 区域管理(三)
24 联机管理
25 背包管理
26 文字板管理
27 容器管理
28 自定义UI管理(一)
29 自定义UI管理(二)
30 自定义UI管理(三)
31 自定义UI应用(一)
32 自定义UI应用(二)
33 自定义UI应用(三)
34 自定义UI应用(四)
35 考试系统
36 购物商城(一)
37 购物商城(二)
38 计算器
39 打击类音游
40 弹球游戏
41 追逐游戏
42 空战游戏(一)
43 空战游戏(二)
44 空战游戏(三)
45 颜色跳跳
46 炮台挑战
47 炸弹游戏
48 推箱子
49 心跳水立方
50 塔防游戏
站点有内容要更新是否更新。
更新
忽略