前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文掌握游戏引导的实现思路

一文掌握游戏引导的实现思路

作者头像
代码咖啡
发布于 2021-12-06 09:42:55
发布于 2021-12-06 09:42:55
1K00
代码可运行
举报
文章被收录于专栏:程序员叨叨叨程序员叨叨叨
运行总次数:0
代码可运行

一年多以前写了两篇从零开始设计游戏引导框架,第二篇写完后,发现写不下去了。游戏引擎形形色色,语言多种多样,如果继续写下去发现并不具有通用性,所以中断了。现在,引导的代码经过多个项目的打磨,有了一定的改进,想着简单分享一下引导的实现思路吧! 本文以Lua代码作为样例,重在思路分享,其他语言亦可实现。

1. 引导认知

1.1 引导分类

引导的分类可分为新手引导触发式引导任务前往引导

1)新手引导

新注册的账号进入游戏后,出现立绘对话、交代游戏背景、告知玩家基础操作的引导,称为新手引导。一般新手引导持续至玩家可以自由操作时结束。

2)触发式引导

玩家自由操作过程中,因达到某种条件而触发的引导,称为触发式引导。大多数情况下,触发式引导会随着新系统的开启。

3)任务前往引导

点击任务前往按钮后,出现手指引导玩家按照任务实现流程去操作的过程,称为任务前往引导

1.2 组别和步骤

1)组别

为方便后续内容达成统一认知,在此将一个个不同功能作用的引导以组别进行区分。比如:一进入游戏即出现的新手引导、英雄升星引导、文字版的抽卡引导等,每一个引导特定功能的引导都是一个组别。

2)步骤

在一个引导组别里,每一步引导的操作都成为步骤,比如:引导点击一个按钮、出现一个立绘对话、出现一个高亮框等,都是引导的步骤。

1.3 触发条件与触发点

触发条件触发点,是引导组别的概念。 举个例子,文字版里有一个抽卡引导,条件是玩家通关1-4。那么对于抽卡这个组别的引导,通关1-4就是它的触发条件,而触发点就是每一个关卡通关那一刻。通俗来讲就是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
触发点:
什么时候判断

触发条件:
判断是否满足条件

1.4 操作

操作是引导步骤的概念。 举个例子,文字版抽卡引导的步骤流程是:

  • 出现立绘对话,告知玩家“招仙台”系统已开启
  • 点击主界面“道场”页签
  • 点击“招仙台”按钮
  • 提示免费单抽
  • 点击“单抽”按钮

上面的每一个步骤都是操作

操作根据表现形式可分为如下几类:

  • 点击
  • 拖动
  • 立绘对话
  • 提示文本
  • 效果(高亮框等)

1.5 保存点

保存点的作用:为保证引导在玩家中途退出重进时依然能从中断点恢复。保存点需要上传记录到服务端。

结合以上几点,我们建立起对引导的认知: 在某个 触发点 ,判断某个 组别 的引导满足 触发条件 ,于是一个 步骤 一个步骤地引导玩家去完成最基础的系统流程的 操作 ,并且支持退出游戏重进时能从中途的 保存点 恢复并继续引导。

2. 引导的配表

引导的配表可分为:guide_group表、guide_step表、guide_text表。

2.1 guide_group配表

guide_group表,主要控制某个组别的引导要不要触发,具体配置如下:

ID

说明

起始步骤

触发条件

优先级

_id

_stepId

_triggerCond

_priority

I

I

[S

I

1

初始的新手引导

101

0

2

抽卡引导

201

{"scene":"MainScene","form":"","missionId":100004}

1

2.2 guide_step配表

guide_step表,主要控制在某个组别的引导触发时,每一步操作具体是什么。相同组别引导的步骤ID连续,且ID不为100的倍数。具体配置如下:

ID

说明

操作

数值

其他参数

保存步骤

_id

_action

_val

_param

_saveId

H

I

I

S

I

201

立绘对话

30001

1002

202

202

点击“道场”页签

10001

1

0

203

点击“招仙台”按钮

10002

1

0

204

提示免费单抽

40001

1002

{"form_show":105,"form":105,"node":"_btnLotteryOne","dir":"top"}

0

205

点击“单抽”按钮后关闭提示

10003

0

{"form":105,"node":"_btnLotteryOne"}

100

_action说明

10000+:点击 10001 点击主界面的页签 ,val 表示第几个页签 10002 点击某个系统入口,val 表示哪个系统 10003 按照代码变量名找到按钮进行点击 20000+:拖拽 ... 30000+:立绘对话 30001 普通立绘对话 40000+:文本提示 40001 普通文本提示

_val说明

不同_action,对应_val表意不同 10001 主界面第几个页签 10002 表示系统ID枚举 30000+ 表示立绘对话的文本ID,从guide_text表里读取 40000+ 表示文本提示的文本ID,从guide_text表里读取

_param说明

一些无法通过_val单个值表意的参数,用_param表意。使用Json字符串配置,扩展性较好,自由度大,可根据需求任意定义。 form_show 某个界面打开的时候执行操作,数值为:界面ID枚举 form 执行当前操作需要在哪个界面,数值为:界面ID枚举 node 关联某个node,通常与form配合使用,旨在找到目标节点,与不同_action关联,表意不同,与点击 关联,表示点击哪个按钮;与提示文本关联,表示文本框依附于哪个UI控件 dir 表示文本框依附在UI控件的哪个方位,数值可以是:"top"、"bottom"、"left"、"right" ...

_saveId说明

在当前操作结束时,将_saveId保存到服务器,下次断线重连时,从保存点继续引导 0 不设置保存点,不做任何操作 100 将当前引导保存点去掉,标记当前组别引导已完成 其他 保存该步骤ID到服务器

2.3 guide_text表

guide_text表,主要配置立绘对话、文本提示等操作的一些文本内容。具体配置如下:

ID

说明

文本内容

参数

_id

_textSid

_param

I

D

S

1001

立绘对话

招仙台已开启,请道友移步入内,招募仙士。

{"role_index":1,"role_id":1}

1002

文本提示

每隔一段时间都会获得一次免费召唤机会

_param说明

role_index 立绘的位置,1:左,2:中,3:右 role_id 立绘角色ID

2.4 程序与策划的配合

1)添加新的引导时

策划出一份引导流程文档,程序根据负责添加引导的逻辑配表:guide_group、guide_step,策划配置负责配置引导的文案:guide_text。

2)修改引导时

如果仅涉及引导文案修改时,策划只需要维护guide_text表即可,如果仅涉及文案增删,策划也可在了解引导配表逻辑的基础上,维护guide_step表; 如果涉及逻辑改动,需要程序配合策划进行改表,程序负责guide_group、guide_step,策划负责guide_text。

可有效规避策划和程序改一份表,影响引导逻辑。

3. 引导代码的实现

根据:

在某个 触发点 ,判断某个 组别 的引导满足 触发条件 ,于是一个 步骤 一个步骤地引导玩家去完成最基础的系统流程的 操作 ,并且支持退出游戏重进时能从中途的 保存点 恢复并继续引导。

代码需要实现的逻辑包括:

  • 引导的触发
  • 引导的操作
  • 引导的保存点(结合在操作中)
  • 引导步骤的连接(如何从当前步骤跳到下一步)

我们把引导的框架逻辑写在GuideMgr.lua里。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")

function M.tryStart() end

function M.start(groupConfig) end

function M.step(stepId) end

function M.finish() end

function M.saveGuideStep(stepId) end

return M

3.1 引导的触发

引导的触发,可分为:触发总入口、触发条件判定和正式触发。

1)触发总入口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")

...

-- 引导触发判定总入口
function M.tryStart()
    -- 引导禁用
    if M.isForbidGuide() then return end
    -- 正在引导,不触发判定
    if M.isGuiding() then return end
  
    -- 获取没有触发过的引导组别,判定是否满足触发条件
    local groupConfigs = M.getGroupConfigs()
    for i = 1, #groupConfigs do
        local config = groupConfigs[i]
        -- 如果满足触发条件
        if CondMgr.isConditionArrayMet(config._triggerCond) then
            -- 触发引导
            M.start(config)
            return true
        end
    end
end

-- 获取没有触发过的引导组别
function M.getGroupConfigs()
    local configs = M._groupConfigs
    if configs == nil then
        configs = {}
            
        for k, v in pairs(D._guideGroupConfig) do
            -- 取没有触发过的引导组别
            if not M.isFinished(k) then
                configs[#configs + 1] = v
            end
        end
    
        table.sort(configs, function(a, b) return a._priority < b._priority end)
        M._groupConfigs = configs
    end
    return configs
end

...

return M

2)条件判定

ID

说明

起始步骤

触发条件

优先级

_id

_stepId

_triggerCond

_priority

I

I

[S

I

2

抽卡引导

201

{"scene":"MainScene","form":"","missionId":100004}

1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("CondMgr")

...

--[[--
配表类型:[S
配表写法:{"form": 101, "hero_level": 20} | {"form":101, "vip_level":3}101界面,英雄等级达到20级或vip等级达到3级,触发引导

cond参数结构:
table数组
{
    {form = 101, hero_level = 20},
    {form = 101, vip_level = 3}
}

只要数组中其中一个条件满足即可
--]]--
function M.isConditionArrayMet(conds)
    for i = 1, #conds do
        if M.isConditionMet(conds[i]) then
            return true
        end
    end
    return false
end

function M.isConditionMet(cond)
    for k, v in pairs(cond) do
        if not M.CondCheck[k](v) then return false end
    end
    return true
end

M.CondCheck = {
    ["form"] = function(val)
        local form = Form.getTop()
        return form and form._id == val
    end,
    ["hero_level"] = function(val)
        local lv = P._playerHero:getOwnedHeroMaxLevel()
        return lv >= val
    end,
    ["vip_level"] = function(val)
        return P:vipLevel() >= val
    end
}

...

return M

3)触发引导

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")

...

function M.start(groupConfig)
    -- 如果有引导正在进行,结束所有引导,开始触发传入组别的引导
    M.finish()

    -- 保存当前正在触发的引导组别ID
    local groupId = groupConfig._id
    M.saveGuideGroup(groupId)
  
    local stepId = groupConfig._stepId
    M.saveGuideStep(stepId)
  
    -- 引导视图层准备工作
    M.prepareLayer()
  
    -- 开始当前引导组的第一步操作
    M._groupId = groupId
    M._stepId = stepId
    M.step(stepId)
end

-- 创建引导图层,后续的所有操作添加的元素都放在这里
function M.prepareLayer()
    local layer = M._layer
    if layer == nil then
        layer = class(nil, V).new(lc.CocosClass.ui_widget)
        layer:setContentSize(lc.ScrSize)
        lc.addChildToCenter(Scene._current, layer, V.ZOrder.guide)
        M._layer = layer

        layer:setTouchListener(function() end)
    end
end

function M.saveGuideGroup(groupId)
    -- TODO:保存到服务端
    ...
end

function M.saveGuideStep(stepId)
    -- TODO:保存到服务端
    ...
end

...

return M

3.2 引导的操作

引导的操作涉及:保存点逻辑、参数逻辑、具体操作(点击、对话等)。

1)引导步骤

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")

...

function M.step(stepId)
    -- 保证step在引导中执行(由M.start发起)
    if not M.isGuiding() then return end

    --[[--
    stepId不为空,表示开始当前步骤操作;
    stepId为空,表示在M._stepId基础上,进入下一步操作;
    --]]--
    if stepId == nil then
        stepId = M._stepId
 
        -- 在当前步骤结束,准备进入下一步时,记录当前步骤的保存点
        local stepConfig = D._guideStepConfig[stepId]
        local saveId = stepConfig._saveId
        if saveId then
            if saveId == 100 then
                M.setGroupFinished(M._groupId)
                M.saveGuideStep()

            elseif saveId > 0 then
                M.saveGuideStep(saveId)
            end
        end

        stepId = stepId + 1
    end
  
    -- 传入的步骤ID不存在,结束引导
    local config = D._guideStepConfig[stepId]
    if config == nil then
        M.finish()
        return
    end
  
    M._stepId = stepId

    -- 清除所有引导元素
    M.clearLayer()

    -- 根据步骤参数做相应处理
    -- (后面继续)
    ...
end

function M.isGuiding()
    return M._stepId and D._guideStepConfig[M._stepId]
end

-- 清理所有layer上的引导元素,包括手指、高亮、立绘对话等
function M.clearLayer()
    local layer = M._layer
    if layer == nil then return end

    layer:setSwallowTouches(true)
    layer:setTouchListener(function() end)

    M.removeFinger()
    M.removeDilog()
    M.removeTipText()
    ...
end

...

return M

2)参数处理

ID

说明

操作

数值

其他参数

保存步骤

_id

_action

_val

_param

_saveId

H

I

I

S

I

204

40001

1002

{"form_show":105,"form":105,"node":"_btnLotteryOne","dir":"top"}

0

205

10003

0

{"form":105,"node":"_btnLotteryOne"}

100

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")

...

function M.step(stepId)
    ...
  
    -- (接上面的代码)
    local config = D._guideStepConfig[stepId]

    -- 根据步骤参数做相应处理
    local param = M.getStepParam(config)
    if param then
        -- 允许玩家自由点击
        if param.free_op then
            M._layer:setSwallowTouches(false)
        end

        M._waitParam = nil

        if param.delay then
            M._waitParam = V.scheduleCall(function() M.doAction() end, param.delay)

        elseif param.event then
            _, M._waitParam = lc.event.once(param.event, function() M.doAction() end)

            if not param.free_op then
                M._layer:setTouchListener(function()
                    -- 提示当前无法点击
                end)
            end
      
        elseif param.form_show then
            local form = Form.getTop()
            if form == nil or form._id ~= param.form_show or not form._isShown then
                _, M._waitParam = lc.event.on("form.show", function(form)
                    if form._id == param.form_show then M.doAction() end
                end)
            end
      
        elseif param.form_close then
            local form = Form.getTop()
            if form and form._id == param.form_close then
                _, M._waitParam = lc.event.on("form.close", function(formId)
                    if param.form_close == formId then M.doAction() end
                end)
            end
        end
    
        if M._waitParam == nil then
            M.doAction()
        end
    end
end

function M.getStepParam(stepConfig)
    stepConfig = stepConfig or D._guideStepConfig[M._stepId]
    return json.decode(stepConfig._param or "")
end

...

return M

3)执行操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")

...

function M.doAction()
    if not M.isGuiding() then return end
  
    local config = D._guideStepConfig[M._stepId]
    M._waitParam = nil
  
    local layer = M._layer
    layer:setSwallowTouches(true)
  
    local action = config._action
    if action == 0 then
        -- 执行下一步操作
        M.step()

    else
        local func = M.ActionFuncs[action]
        if func then
            if not func(config) then
                M.finish()
            end
  
        else
            -- 交给外部处理
            V.scheduleCall(function() lc.event.emit("guide.step", config) end, lc.FrameInterval)
        end
    end
end

M.Action = {
    click_main_tab = 10001,
    click_sys_entrance = 10002,
    click_by_name = 10003,
    ...
    dialog = 30001,
    ...
    tip_text = 40001,
    ...
}

M.ActionFuncs = {
    [M.Action.click_main_tab] = function(config)
        local index = config._val
        local tab = table.walk(Scene._curent, "_tabs", index)
        if tab and tab:isVisible() then
            M.addTouchFinger(tab)
            return true
        end
    end,
    [M.Action.click_sys_entrance] = function(config) ... end,
    [M.Action.click_by_name] = function(config) ... end,
  
    [M.Action.role_dialog] = function(config)
        local textConfig = D._guideTextConfig[config._val]
        M.addDialog(textConfig)
        return true
    end,
  
    [M.Action.tip_text] = function(config)
        local textConfig = D._guideTextConfig[config._val]
        M.addTipText(textConfid._textSid, config._param)
        return true
    end
}

...

return M

回顾

10000+:点击 10001 点击主界面的页签 ,val 表示第几个页签 10002 点击某个系统入口,val 表示哪个系统 10003 按照代码变量名找到按钮进行点击 20000+:拖拽 ... 30000+:立绘对话 30001 普通立绘对话 40000+:文本提示 40001 普通文本提示

3.3 引导的结束

引导的结束包括:引导数据处理、视图层移除、尝试继续触发下一组引导。所有逻辑囊括在GuideMgr.finish()方法里。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")
...

function M.finish()
    -- 数据层
    M.saveGuideGroup()
    M.saveGuideStep()

    if M._groupId then
        M.setGroupFinished(M._groupId)
    end
  
    M._groupId = 0
    M._stepId = 0

    -- 视图层
    M.clearLayer()
    M.removeLayer()

    local param = M._waitParam
    if param then
        -- 移除事件监听
        if param._event then
            lc.event.remove(param)
        
        -- 移除延迟操作的定时器
        else
            param:unschedule()
        end
        M._waitParam = nil
    end
  
    -- 延迟一帧判断是否有新的引导可以触发
    V.scheduleCall(M.tryStart, lc.FrameInterval)
end

...

return M

3.4 步骤间的连接

步骤间的连接,也就是当前步骤如何跳到下一步骤,需要根据操作情景做特殊处理,这里以点击、立绘对话为例,做一下讲解。

1)点击

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")
...

function M.addTouchFinger(node, ...)
    ...
    node._lastListener = node._listener
    node._listener = M.fingerTouchListener
    ...
end

function M.fingerTouchListener(...)
    ...
    if node._lastListener then
        node._lastListener(...)
        node._listener = node._lastListener
    end
  
    -- 按钮点击后,执行下一步
    M.step()
    ...
end

...
return M

2)立绘对话、文本

点击屏幕任意位置,执行下一步引导操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local M = class("GuideMgr")
...

function M.addDialog()
    ...
  
    M._layer:setTouchListener(function()
        ...
        -- 设置layer点击事件
       M.step()
        ...
    end)
  
    ...
end

function M.addTipText()
    ...
  
    M._layer:setTouchListener(function()
        ...
        -- 设置layer点击事件
        M.step()
        ...
    end)
  
    ...
end

...
return M
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/8/8 下午,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
固定资产管理系统能给企业带来哪些好处?
曾几何时,行政、IT和固定资产管理员还在为海量固定资产的管理和盘点而惆怅。而今,有了固定资产管理系统,这些问题都可以迎刃而解。在梳理好自己企业内部的固定资产管理需求之后,上一套适合自己企业的固定资产管理软件很有必要。
易点易动固定资产管理系统
2021/07/01
8060
固定资产密集型企业如何有效管理固定资产?
很多固定资产密集型企业往往在固定资产管理上花费了大量的人力和成本。在日常的经营管理中,许多企业依旧采用传统方式管理企业的固定资产,由于实物资产数量大、存放地点分散、职权不清以及粗放式管理,经常会出现权责不明确,固定资产分配不合理,闲置率高,重复购买,维护成本高等问题,从而导致大量固定资产的状态不明,丢失严重,固定资产的实际利用率低下,给企业的发展带来阻碍。
易点易动固定资产管理系统
2021/08/04
9440
如何在固定资产管理的路上乘风破浪?
目前,随着企业发展内部的需求推动,加上外界环境的多变,更多企业越来越重视,不但要降本增效为企业发展助力,而且要加速智能化发展的步伐。然而,要加强企业不同细分领域的智能化发展需要循序渐进,非一朝一夕之功。
易点易动固定资产管理系统
2021/08/13
3170
固定资产管理系统--企业降本增效的必备工具
随着公司业务和规模的日益扩大,公司的固定资产数量和种类也随之扩大和增长。这就给固定资产管理和盘点工作带来了一定的挑战。对于大型的企业而言,由于实物资产数量的庞大,传统的手工盘点和表格管理固定资产的方式已不能满足固定资产管理的需求,管理出错的风险也不断提高。而且由于无法实现信息化管理,固定资产的重复采购率和闲置率也居高不下,这无疑增加了企业的运营成本。
易点易动固定资产管理系统
2021/11/05
4610
固定资产管理系统--企业降本增效的必备工具
固定资产管理系统让企业动态掌握资产情况
很多企业经常会因为固定资产信息分散、查询不便、信息反映实效性差、纸质文档不易保存等问题导致资产流失、重复购买严重等问题,从而导致企业成本大幅度提升。越来越多的企业开始使用专业的固定资产管理系统,它可以将企业的固定资产信息、人员信息、部门信息等进行整合,还可以实现多层级和多组织架构的管理,实现固定资产的统筹管理,从而整合企业资产信息,提升固定资产利用率,减少重复采购并避免资产流失。
易点易动固定资产管理系统
2022/06/29
3820
固定资产管理系统让企业动态掌握资产情况
固定资产管理系统如何简化固定资产管理和盘点工作?
固定资产管理通常是各企业或事业单位的行政和财务以及IT部门的必修工作之一。那么,如何管理好数量庞大的固定资产,提升固定资产的使用效率,降低闲置率和重构率是评估固定资产管理工作做得好坏的重要标准。现实工作中,固定资产的数量多、领用审批凌乱、盘点难度大、固定资产的信息更新不及时等很多问题一直困扰着资产的管理者。
易点易动固定资产管理系统
2020/09/02
1.1K0
互联网行业如何高效地管理固定资产?
互联网行业通常对电脑、桌椅等办公设备的需求量大,而且对于质量要求比较高。互联网行业的扩张也比较迅速,经常需要扩充员工人数。如果不断开拓市场中,市场覆盖的区域都可以设置子公司或办事处以开展当地的业务。这样以来,互联网公司的固定资产往往具有以下特点:电子设备资产量大、人员数量和流动性比较大、异地管理等。
易点易动固定资产管理系统
2021/03/17
6290
互联网行业如何高效地管理固定资产?
8款最好用的固定资产管理软件
固定资产作为企业生产经营的重要部分,越来越被众多企业主重视。之前,大部分公司会选择EXCEL来管理固定资产。在固定资产系统如雨后春笋般涌出的时代,大部分公司会选择一款固定资产管理软件来精细化管理固定资产。尤其是分公司和分支比较多的集团公司,或者资产量比较多的企业和单位。
易点易动固定资产管理系统
2020/07/22
3.9K1
如何提升企业内部的固定资产管理水平?
经过对国内近千家企业的调研发现,很多企业在固定资产管理上依然有很多薄弱环节。大部分企业依然存在如下的问题:1)从固定资产采购到资产报废、处置整个流程缺乏全过程管理。从而导致固定资产重复购置问题严重,利用率低下,造成企业运营成本增加。2)每年一次或者两次的固定资产盘点,通常人力不足,盘点工作很难执行到位,外包盘点成本高。
易点易动固定资产管理系统
2021/07/28
4660
如何提升企业内部的固定资产管理水平?
企业何如选择固定资产管理系统
2020年已经过半,今年对于大多数企业来说都是不平常的一年。有许多企业的业务受阻,甚至生存都出现危机。今年,企业主正好可以放慢前行的脚步去完善今后的战略规划,以寻求内在发展动力。
易点易动固定资产管理系统
2020/07/03
6940
说说IT企业固定资产管理系统的问题和解决方法
IT企业随着业务的扩大、人员的增多,企业的固定资产数量和种类都会随之越来越多。当IT企业发展到一定规模后,内部管理通常会遇到一些问题:
易点易动固定资产管理系统
2021/12/13
6990
说说IT企业固定资产管理系统的问题和解决方法
固定资产云系统如何破解制造业数字化转型升级难题?
近年来,无论是互联网行业还是传统的制造行业,几乎各行各业都在积极拥抱数字化,旨在提升企业的效率,从容地应对瞬息万变的市场变换和竞争。当下,各行各业数字化转型升级的需求依然迫切,制造业亦如是。
易点易动固定资产管理系统
2021/07/23
3450
固定资产管理流程和技巧
企业固定资产是保证企业正常运行的重要基础物质条件,其管理及核算状况影响对企业业务活动的开展,经济效益的提高。从目前实际情况看,企业在固定资产管理,核算等方面存在诸多问题,因此,加强企业固定资产管理成为不容忽视的问题。
易点易动固定资产管理系统
2021/08/16
7090
如何实现固定资产管理智能化?
行政人员、IT人员、固定资产管理员在管理和盘点企业的固定资产时,往往都会出现以下场景:
易点易动固定资产管理系统
2021/07/21
5570
教育行业固定资产管理的解决方案
近年来,随着课外教育机构的迅速发展,办学规模越来越大,很多连锁教育机构对于固定资产管理管理上面还是各有各的痛点。另外,对于很多幼儿园、小学、中学、高中、大学而言,固定资产管理和盘点上工作仍然是一个薄弱环节。这其中有不少因素:从固定资产的数量看,业务活动和机构分支多,加上固定资产数量骤增,管理难度确实日益增大。从管理流程和方法上看,分支机构的调整、学校内部后勤、财务、行政、人事等工作需要协调和规范。
易点易动固定资产管理系统
2021/07/22
6270
为什么说手工表格管理固定资产已经OUT了?
以电子表格、纸质数据为主的传统固定资产管理和盘点的方式已被各种各样的固定资产管理系统所取代。人工管理的弊端和缺陷如下:
易点易动固定资产管理系统
2021/09/18
5810
为什么说手工表格管理固定资产已经OUT了?
企业如何进行高效化固定资产管理?
在信息化的今天,企业飞速发展的路上,如何早日实现企业信息化管理,是每个企业管理者思考的问题。作为企业管理中至关重要的一环,固定资产管理也被越来越多的管理者所重视。因为随着企业规模扩大、业务范围拓宽、人员数量的增多,如何有效地进行固定资产管理已经成为每一个企业管理者重要的一部分。
易点易动固定资产管理系统
2021/11/29
4210
企业如何进行高效化固定资产管理?
零售商超固定资产管理系统解决方案
零售超市在日常的固定资产管理和运营中比较复杂,遇到的各种实际操作问题比较多,为此,易点易动在对多家商业超市进行深入调查和需求梳理之后,提出了符合零售商超行业的固定资产管理方案。
易点易动固定资产管理系统
2021/10/19
4980
零售商超固定资产管理系统解决方案
企业数字化转型, RFID固定资产管理系统不可或缺
在企业普遍加快信息化进程的当下,越来越多的企业开始注重企业内部的管理。比如客户管理、合同管理、固定资产管理等。越来越多的企业摆脱了手工管理模式,开始引入各种系统给企业信息化助力。固定资产管理系统也被引入到企业的管理中。采用现代的云计算技术、条码、二维码技术、RFID等技术与相应的硬件扫描技术相结合,优化了固定资产的全生命周期管理流程,极大地提高了企业实物资产的管理和盘点效率,降低固定资产重复采购和丢失率,提升固定资产的利用率,为企业实现降本增效。
易点易动固定资产管理系统
2021/10/15
4850
企业数字化转型, RFID固定资产管理系统不可或缺
2023年企业固定资产管理怎么破局?
2022年已经在风雨中过去,转眼我们迎来了2023年。过去的一年,固定资产管理的痛依旧历历在目,如何让新的一年中,固定资产管理工作有所突破,不再承受固定资产资产管理的痛处,是每个企业管理者和企业固定资产管理员思考的问题。
易点易动固定资产管理系统
2022/12/23
4330
2023年企业固定资产管理怎么破局?
推荐阅读
相关推荐
固定资产管理系统能给企业带来哪些好处?
更多 >
LV.5
这个人很懒,什么都没有留下~
目录
  • 1. 引导认知
    • 1.1 引导分类
      • 1)新手引导
      • 2)触发式引导
      • 3)任务前往引导
    • 1.2 组别和步骤
      • 1)组别
      • 2)步骤
    • 1.3 触发条件与触发点
    • 1.4 操作
    • 1.5 保存点
  • 2. 引导的配表
    • 2.1 guide_group配表
    • 2.2 guide_step配表
    • 2.3 guide_text表
    • 2.4 程序与策划的配合
      • 1)添加新的引导时
      • 2)修改引导时
  • 3. 引导代码的实现
    • 3.1 引导的触发
      • 1)触发总入口
      • 2)条件判定
      • 3)触发引导
    • 3.2 引导的操作
      • 1)引导步骤
      • 2)参数处理
      • 3)执行操作
    • 3.3 引导的结束
    • 3.4 步骤间的连接
      • 1)点击
      • 2)立绘对话、文本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档