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

2023-10-27 20:30

本文主要是介绍「新手引导框架」升级,支持自动挂机等更多玩法!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01

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

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

微信小游戏环境也成功了640

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

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工具,看下图:

640?wx_fmt=jpeg

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

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

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

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

03

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

       https://github.com/ShawnZhang2015/GodGuide

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

明天是教师节,Shawn特地为教师节准备了一份自己的礼物:

小游戏、大能量,愿我们在前进的道路上砥砺前行,共同成长!欢迎伙伴们加我微信:z6346289。

640?wx_fmt=jpeg

640? 
640?wx_fmt=png 

Creator星球游戏开发社区

长按二维码,关注我们!

640?wx_fmt=gif

这篇关于「新手引导框架」升级,支持自动挂机等更多玩法!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/288196

相关文章

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

基于Python实现温度单位转换器(新手版)

《基于Python实现温度单位转换器(新手版)》这篇文章主要为大家详细介绍了如何基于Python实现温度单位转换器,主要是将摄氏温度(C)和华氏温度(F)相互转换,下面小编就来和大家简单介绍一下吧... 目录为什么选择温度转换器作为第一个项目项目概述所需基础知识实现步骤详解1. 温度转换公式2. 用户输入处

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe