前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战案例分享 | “新手引导”与游戏“录像回放”

实战案例分享 | “新手引导”与游戏“录像回放”

作者头像
张晓衡
发布2019-09-11 18:34:49
8280
发布2019-09-11 18:34:49
举报

1. 新手教学

下面是游戏中使用到的新手教学引导配置,它是我用引导框架的录像功能生成的,在中间增加了文字提示:

代码语言:javascript
复制
module.exports = {
    debug: false,     //不开启调试
    autorun: false,   //不自动引导
    mask: false,      //不开启遮罩
    steps: [
        {
            desc: "引导开始",
            position: cc.v2(150, 66),
            command: { cmd: "text", args: ['欢迎来到消消大冒险', '请让我为你讲解一下游戏的玩法吧!'] },
        },
        {
            desc: "点击GameMatrix/item_6_6",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_6_6"
            },
        },
        {
            desc: "点击GameMatrix/item_3_7",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_3_7"
            },
            "delayTime": 1
        },
        {
            desc: "点击GameMatrix/item_3_3",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_3_3"
            },
            "delayTime": 1
        },
        {
            desc: "点击GameMatrix/item_3_6",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_3_6"
            },
            "delayTime": 1
        },
        {
            desc: "使用锤子道具",
            position: cc.v2(180, 130),
            command: { cmd: "text", args: ['使用流星锤清理障碍'] },
        },
        {
            desc: "点击HammerItem",
            command: {
                cmd: "finger",
                args: "HammerItem"
            },
            "delayTime": 1
        },
        {
            desc: "点击GameMatrix/item_3_4",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_3_4"
            },
        },
        {
            desc: "点击GameMatrix/item_3_5",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_3_5"
            },
            "delayTime": 1
        },
        {
            desc: "点击HammerItem",
            command: {
                cmd: "finger",
                args: "HammerItem"
            },
            "delayTime": 1
        },
        {
            desc: "点击GameMatrix/item_2_4",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_2_4"
            },
        },
        {
            desc: "点击GameMatrix/item_7_3",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_7_3"
            },
            "delayTime": 1
        },
        {
            desc: "关键提示1",
            position: cc.v2(190, 130),
            command: { cmd: "text", args: ['看出我的用意了吗?','我们已经把红色的星星连成了一大片'] },
        },
        {
            desc: "点击GameMatrix/item_3_5",
            command: {
                cmd: "finger",
                args: "GameMatrix/item_3_5"
            },
            "delayTime": 1
        },
        {
            desc: "关键提示2",
            position: cc.v2(190, -10),
            command: { cmd: "text", args: ['尽可能地将同一种颜色星星连接起来,这样才能得高分哦!'] },
        },
        {
            desc: "引导结束",
            position: cc.v2(190, -10),
            command: {
                cmd: "text",

                args: ['您学会了吗,是不是很简单呢?','我们去战斗吧!!!'],
            },
        },
        {
            desc: "点击返回按钮",
            command: {
                cmd: "finger", 
                args: "back"
            },
        },

        {
            desc: "点击返回按钮",
            command: {
                cmd: "finger", 
                args: "QueryDialog > btnOk"
            },
        },
    ]
};

2. 游戏录像

相信很多人关心,消消大冒险中游戏录像是怎么实现的,其实思路很简单,主要分为两大部分:录像回放

录像

录像并不是真的将游戏的视频画面记录下来,记录的是消除矩阵的初始数据,游戏过程中点击矩阵元素的序号,数据结构如下:

代码语言:javascript
复制
gameRecord = {
    //游戏初始矩阵,星星颜色
    indexes: [
        0, 4, 1, 4, 2, 2, 0, 1, 1, 2,
        3, 0, 2, 2, 4, 4, 2, 0, 2, 4, 
        4, 3, 1, 4, 3, 0, 2, 0, 1, 2, 
        4, 1, 4, 4, 1, 3, 3, 2, 4, 3,
        2, 0, 2, 4, 0, 4, 2, 4, 3, 1,
        0, 4, 4, 4, 3, 0, 2, 3, 4, 0, 
        1, 2, 1, 1, 2, 2, 2, 3, 0, 4, 
        3, 3, 0, 4, 0, 4, 4, 4, 4, 4, 
        2, 2, 2, 3, 3, 3, 2, 1, 2, 4,
        4, 4, 3, 3, 3, 0, 4, 1, 4, 2
    ],
   //操作指令:
   commans: [
      {t:1, i:10},{t:1, i:11},{t:2, hammer: true} ...
   ]

上面commans中t为操作类型,t=1为消除操作,i是上面indexes数组的下标索引。除了要记录消除操作外还要记录道具的使用t=2是道具的使用,hammer:true表示选中锤子道具。

回放

有了上面的初始数据和操作记录,回放就简单了,将commans中的数据还的为游戏的操作即可,下面是关键代码:

代码语言:javascript
复制
//回放函数
playbackCommand() {
    let obj = this._commands[this.index++];
    //操作指令用完,显示结束
    if (obj === undefined) {
        this._showResultDialog();
        return;
    }
    cc.log('---->', JSON.stringify(obj));
    let node;
    //解析指令
    if(obj.t === 1){   //消除动作指
        //获取点击的节点,做手指动画
        node = this._gameMatrixPlayer.getItem(obj.i);
        this.playFinger(node, () => {
            cc.game.emit('playback_clear', obj.i ); 
        });
    } else {          //道具动作
        //获取锤子节点,做手指动画
        node = this._hammerItem.node;
        this.playFinger(node, () => {
            cc.game.emit('playback_hammer',obj.hammer);
            this.scheduleOnce(this.playbackCommand, 1);
        });
    }
},

指令解析完成后,通过事件广播让具体的游戏模块去完成任务,还需要注意的是游戏中的异步动画,playbackCommand命令是在接收到消除动画完毕后才能执行下一条指令的解析,看下面代码:

代码语言:javascript
复制
//接收到游戏矩阵消除掉落后,才能解析下一条
cc.game.on('game_matrix_drop_end', () => {
    this.scheduleOnce(() => {
        this.playbackCommand();
    }, 1);
}, this);

而道具的选择、取消没有事件发出,上面通过this.scheduleOnce触发下一条指令解析。

以上分享希望对你有所帮助,如果有兴趣请到游戏中体验,点击上面游戏卡片即可看到Shawn的游戏过程,感谢您的支持!

Shawn的新手引导框架,订阅可获得框架代码的详细分析与DEMO源码工程!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Creator星球游戏开发社区 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. 游戏录像
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档