开源新手引导框架升级,全平台自动执行,更多花式玩法!

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

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

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

代码如下:

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);
}

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

  1. 实现自动化测试
  2. 外挂实现
  3. 游戏内部的自动挂机

使用引导框架的自动执行的能力 + 操作录像功能,将会极大的降低挂机类游戏的研发成本,为开发人员节省时间!

更多详情请关注「Creator星球游戏开发社区」公众号,开放源码

5赞

请问web上模拟点击怎么实现呢