新手引导框架开源啦,支持TypeScript!

新增修改

##1. 修正微信小游戏上报错问题
##2. 移除对cc.Toggle组件的依赖
##3. 修正自动引导失效问题
##4. TypeScript支持
##5. 新手引导开放源码

#公众号上回复【新手引导源码】即可获得

早期的项目中Shawn遇到游戏终于要完成了,辛苦了一阵满以为可以稍微放松一下了,但策划、运营要求,增加一个他们认为非常“简单”且重要的功能:新手引导

回想起当年,接到这个任务时的感觉是手脚冒汗、天晕地暗、日月无光,游戏代码本来就千疮面孔,逻辑错综复杂,根本不知道该怎么下手?更困难的是,游戏本身功能和需求还不稳定,老板随便一个想法可能就会被改、改、改…,我该怎么办?

在这种情艰难的情况下一定要,需要保持冷静,在痛定思痛之后,我开始了引导功能的开发,在做的过程中一不断积累,编写了一套配置式、可编程的引导框架,然后交给其他开发人员或策划人员做具体的引导内容,真的是“杀不死你的会使你更强大”。

下面是我使用Cocos Creator 官方 demo-ui 工程上嵌入的引导案例演示:

demo体验地址:
http://example.creator-star.cn/demo-ui

引导配置:

module.exports = {
    name: '进入商店',
    debug: true,
    autorun: true,
    steps: [
        {
            desc: '点击主界面主页按钮',
            command: { cmd: 'finger', args: 'Home > main_btns > btn_home'},
            delayTime: 1,
        },
        {
            desc: '点击主界面设置按钮',
            command: { cmd: 'finger', args: 'Home > main_btns > btn_setting'},
        },
        {
            desc: '点击主界面商店按钮',
            command: { cmd: 'finger', args: 'Home > main_btns > btn_shop'},
        },
        {
            desc: '点击商店充值按钮',
            command: { cmd: 'finger', args: 'Home > Shop > btnCharge'},
            delayTime: 2
        },
        {
            desc: '点击充值界面关闭钮',
            command: { cmd: 'finger', args: 'chargePanel > btn_close'},
            delayTime: 2
        },
    ]
};

节点定位器

上面配置中看到的“Home > main_btns > btn_home”我称之为节点定位器,使用它可以简单、精确、稳定地表达场景中的任意节点。

引擎提供了 cc.find 函数,传入节点路径可搜索出 Canvas 下任意节点,如下图所示:

使用

cc.find('Canvas/Home/lower/main_btns/layout/btn_home')

节点路径字符串可以精确定位到btn_home节点,但在实际使用中时会感觉很繁琐:

  1. 字符串太长,容易出错;
  2. 节点名字、层级变化,节点路径字符串就失效了,容易被误伤。

为了使路径表达更简洁可靠,笔者引入了两个定位符号:

/: 右斜杠,代表1级子节点(与cc.find相同)
>: 大于符号,表示1~n级子节点

可以将上面btn_home节点的定位符改为

godGuide.find('Canvas > btn_home');

如果我们默认从Canvas节点开始检索,也可以直接写成下面这样:

godGuide.find('btn_home');

这样将从 Canvas 节点一层层开始遍历,想提高检索节点的效率可以改为:

godGuide.find('Home > main_btns > btn_home');

如果场景中有同名节点,也可以使用 '>'符号解决,但同一层级不能有同名节点(如果你需要引导的话)。

'>'符号也可与'\'混合使用,如下:

let btn_home  = godGuide.find('Home>main_btns/btn_home');
let btn_level = godGuide.find('Home>main_btns/btn_level');

需要注意的是,节点名命不要使用'>''\'这两个字符 。

自动执行引导

引导的测试工作效率低下,既然有了可配置的引导,能否让它自动去执行呢?

录制操作流程

如果引导类能监听任意节点事件,获取节点全路径,是否可以代替人工配置呢?
enter image description here

Chat 大纲:

本篇 Chat 从开发痛点出发,在 Cocos Creator 项目中使用一种 配置试可编程的新手引导编程体验,你会获得下面收获:

  • 分离引导与游戏之间的逻辑

    • 引导操作流程分析
    • 上帝模式—观察场景中任意节点与事件
    • 任务式引导 task 与 step
    • 引导任务的 JSON 式表达
  • 点击操作的引导实现细节

    • 节点定位器的实现
    • 节点遮罩的实现
    • 触摸事件的拦截与放行
    • 目标节点触摸完成监听
  • 设计一个简易的引导任务框架

    • 引导框架—串联异步引导步骤
    • 引导步骤—步骤生命周期回调与指令
    • 指令设计—实现手指动画指令
  • 自动化引导更多的可能性

    • 浏览器自动引导实现
    • 录制游戏的操作流程
    • 基于引导任务的自动化测试

GitChat 分享卡:

GitChat文章需要80人参与预订才能通过,到目前为止已经有43位伙伴,如果你觉得以上的内容对自己或他人有所帮助感谢订阅或转发,在此感激不尽,你的支持是我创作的最大动力


##增加文本指令,配置如下:

{
    cmd: 'text'
    args: [ 
        '欢迎体验Shawn的新手引导框架',
        '本案例演示:\n1.文本提示指令\n2.手指定位指令\n3.自动执行引导\n4.点击操作录像',
        '首先,请点击首页按钮'
    ]
}

演示视频更新,在线体验更新
###演示视频
http://v.youku.com/v_show/id_XNDI3NzY4MzMyMA==.html
(点击去优酷观看)
###在线体验地址
http://example.creator-star.cn/demo-ui-autorun

新增修改

##1. 修正微信小游戏上报错问题
##2. 移除对cc.Toggle组件的依赖
##3. 修正自动引导失效问题
##4. TypeScript支持
##5. 新手引导开放源码

#公众号上回复【新手引导源码】即可获得

41赞

mark沙发

mark,赞一个

mark

图片挂了

我没看到呢? 是不是gif图片显示的慢的原因?

看到了:joy:,感谢提醒

mark

mark

mark 已经预定

mark一下,感觉以后会用到

有用。。。

这个感觉不错

mark

手动马克

自动引导演示地址:
http://example.creator-star.cn/demo-ui-autorun

拖动某节点到某位置的引导有木有

框架中未提供有,但可以基于框架自定义指令,例如配置如下:

{
    cmd: 'dragNode',
    args: {
        target: '被拖动节点定位器字符串', 
        dest:   '目标位置节点定位器字符串'
   }
}

只要拿到【被动作节点】与【目标位置节点】就好办了,在这两个节点位置上播放手指拖动画引导用法操作。

mark

请问有开源吗