前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「新手引导框架」升级,支持自动挂机等更多玩法!

「新手引导框架」升级,支持自动挂机等更多玩法!

作者头像
张晓衡
发布2019-09-11 18:52:28
1.8K0
发布2019-09-11 18:52:28
举报

01

将新手引导框架开源之后,陆续收到不少伙伴们的反馈,其中有一个问题是“引导脚本的自动执行,只能在浏览器上运行,感觉有些鸡肋”。

从最开始 Shawn 也一直在思考如何实现在原生环境上的屏幕点击模拟,之前的思路是分别在 iOS\Android 上分别实现一套原生的 JSB 接口,调用系统的能力来模拟真实的屏幕触摸,不过要让大家使用起来需要折腾 JSB\c++,相当于SDK接入,太过于复杂。

在与脱贫实验中的伙伴们几次交流讨论,大家给出了不同的方案,其中有「黝黑蜗牛」的方案给了我很大的启发,下面是解决原生上实现自动节点点击的讨论过程。

「黝黑蜗牛」提出新的思路,使用cc.Button组件发送点击事件来模拟。

但是非按钮节点怎么办呢?动态创建用完再删除...还有更好的方法吗?

调试 Cocos Creator 的源码,找到事件派发的根源上,需要一个event事件对象。

再向上追踪源码,定位到handleTouchesEnd函数,touches参数是点击的坐标,比较好创建。

调用引擎接口handleTouchesBegin\handleTouchesEnd在Mac模拟器上自动执行成功!

微信小游戏环境也成功了

下面是模拟点击的核心代码:

代码语言:javascript
复制
function touchSimulation(x, y) {
    //获取屏幕矩形大小
    let rect;
    let inputManager = _cc.inputManager;
    if (cc.sys.isBrowser) {
        let canvas = document.getElementById("GameCanvas");
        rect = inputManager.getHTMLElementPosition(canvas);
    } else {
        rect = cc.view.getFrameSize();
        rect.left = 0;
        rect.top = 0;
    }
    //将x,y从Creator世界坐标转换到设备窗口坐标
    let vp = cc.view.getViewportRect();
    let sx = cc.view.getScaleX();
    let sy = cc.view.getScaleY();
    let ratio = cc.view.getDevicePixelRatio();
    let htmlx = (x * sx  + vp.x) / ratio + rect.left;
    let htmly = rect.top + rect.height - (y * sy + vp.y) / ratio;
    let pt = cc.v2(htmlx, htmly);
    //模拟点击操作
    cc.log(`模拟点击坐标:${pt.x}, ${pt.y}`);
    let touch = inputManager.getTouchByXY(pt.x, pt.y, rect);
    inputManager.handleTouchesBegin([touch]);
    setTimeout(() => {
        inputManager.handleTouchesEnd([touch]);    
    }, 200);
}

02

折腾这么多,新手引导自动执行到底有什么价值呢?

看过Shawn的GitChat文章想必你知道,新手引导自动执行可以实现自动化测试,引导脚本就是自动化测试脚本。

Shawn早在Cocos2d-js时使用过Cocos官方开发的Cocos2d-js devtool工具,看下图:

它是直接将一段 JS 代码嵌入已经运行的 Cocos2d-js 游戏中,如果将新手引导的自动执行能力动态嵌入一个 CocosCreator H5 游戏那将会是什么呢?—— 外挂

新手引导框架本身不依赖于具体游戏的代码逻辑,重点只关心场景树结构、关键节点名字,要实现一个外挂的可行性非常高。

一讲到外挂估计大家都觉得有点黑暗,那我们换一个正面的思路,实现一个“内挂”,就是在游戏内部的挂机自动执行。

想信大多数人都见过很多无脑的,自动打怪、自动做任务的传奇类挂机游戏... 使用引导自动执行的能力 + 操作录像功能,将会极大的降低挂机类游戏的研发成本,为开发人员节省时间!

03

新手引导框架正式迁移到GitHub地址:

https://github.com/ShawnZhang2015/GodGuide

「Creator星球游戏开发社区」从最早的「奎特尔星球」改名来,Shawn的愿景一直都没有改变:“帮助初学者快速入门,助力企业降低研发成本,让游戏成为教育的最强武器!

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

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

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

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

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