首页 / 专利库 / 家用器具 / 定时器 / 一种cocos2dx嵌入cef实现透明网页的方法

一种cocos2dx嵌入cef实现透明网页的方法

阅读:790发布:2020-05-08

专利汇可以提供一种cocos2dx嵌入cef实现透明网页的方法专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种cocos2dx嵌入cef实现透明网页的方法,在cocos2dx中创建显示网页层,开启刷新 定时器 ,创建浏览器对象;创建cef事件处理对象并注册;cef将RGBA位图数据回调给网页层,网页层将数据缓存到队列尾部;在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,使用数据初始化或更新纹理;网页层检测是否有 键盘 、 鼠标 事件触发,若有,则重组消息发送给cef;若无,则执行上一步。本发明提供的方法,cef离屏 渲染 回调位图数据,cocos2dx显示位图实现透明网页,填补了cocos2dx在Windows平台下内嵌web的空缺。,下面是一种cocos2dx嵌入cef实现透明网页的方法专利的具体信息内容。

1.一种cocos2dx嵌入cef实现透明网页的方法,其特征在于,包括以下步骤:
S1:在cocos2dx中创建并显示网页层,开启所述网页层的刷新定时器,创建浏览器对象;
S2:创建cef事件处理对象,注册所述事件处理对象到所述浏览器对象;
S3:启动cef消息循环,分发处理消息,将渲染后得到的RGBA的位图数据回调给所述网页层,所述网页层将所述数据缓存到队列尾部;
S4:所述网页层在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,若未创建,则使用所述数据创建背景精灵和初始化纹理,若已创建,则使用所述数据更新纹理;
S5:所述网页层检测是否有键盘鼠标事件触发,若有,则重组消息发送给cef;若无,则执行S4。
2.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,在S1之前还包括:初始化cef环境,创建全局CefApp对象,开启离屏渲染,调用CefInitialize完成初始化。
3.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S1中开启所述网页层的刷新定时器具体包括:调用ScheduleUpdate开启update定时器。
4.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S1中创建浏览器对象具体包括:调用CefBrowserHost::CreateBrowser创建浏览器对象。
5.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S3中将渲染后得到的RGBA的位图数据回调给所述网页层进一步包括:cef通过OnPaint回调出渲染后得到的RGBA的位图数据,通知网页层有数据回调。
6.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,在S3之前还包括:cef通过所述事件处理对象回调出网页显示的大小和位置
7.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S5中所述网页层检测是否有键盘、鼠标事件触发进一步包括:所述网页层注册mouse down、move和up事件的监听,将收到的坐标封装成windows鼠标消息事件,调用cef的发送鼠标消息接口传递给cef内部响应。
8.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S5中所述网页层检测是否有键盘、鼠标事件触发还进一步包括:所述网页层重定向主窗口的窗口过程,检测到键盘事件时,调用cef的发送键盘消息接口传递给cef内部响应。
9.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S3中将渲染后得到的RGBA的位图数据回调给所述网页层之前还包括:判断是否有位图数据回调,当有位图数据时,将所述位图数据缓存入队列。
10.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,在S5步骤之后还包括:关闭主窗口时,发送退出消息给cef,等待cef退出循环,调用CefShutdown释放cef环境。

说明书全文

一种cocos2dx嵌入cef实现透明网页的方法

技术领域

[0001] 本发明涉及网页处理技术领域,特别是涉及一种cocos2dx嵌入cef实现透明网页的方法。

背景技术

[0002] Cocos2dx是MIT许可证下发布的开源游戏引擎,游戏开发快速、简易、功能强大。Cocos2dx的核心优势在于允许开发人员利用C++、Lua及Javascript来进行跨平台部署,覆盖平台包括iOS、Android、Windows Phone、Windows,Mac OSX 3及Tizen等,省事省省成本。
[0003] 在现有cocos2dx框架下,只有在Android端和ios端实现了webview支持网页内嵌打开,并可实现透明网页;然而在Windows平台下,cocos2dx框架没有提供相应的webview功能。因此在Windows下目前只能另辟蹊径,来实现网页内嵌的功能。
[0004] 因此,在Windows平台下,cocos2dx框架下实现透明网页的加载,填补cocos2dx在Windows平台下内嵌加载网页的空缺,是本领域技术人员需要解决的技术问题。

发明内容

[0005] 本发明提供了一种cocos2dx嵌入cef实现透明网页的方法,以解决Windows平台下无法在cocos2dx框架下实现透明网页的加载的问题,填补了cocos2dx在Windows平台下内嵌加载网页的空缺。
[0006] 为解决上述技术问题,本发明的技术方案为:
[0007] 一种cocos2dx嵌入cef实现透明网页的方法,包括以下步骤:
[0008] S1:在cocos2dx中创建并显示网页层,开启所述网页层的刷新定时器,创建浏览器对象;
[0009] S2:创建cef事件处理对象,注册所述事件处理对象到所述浏览器对象;
[0010] S3:启动cef消息循环,分发处理消息,将渲染后得到的RGBA的位图数据回调给所述网页层,所述网页层将所述数据缓存到队列尾部;
[0011] S4:所述网页层在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,若未创建,则使用所述数据创建背景精灵和初始化纹理,若已创建,则使用所述数据更新纹理;
[0012] S5:所述网页层检测是否有键盘鼠标事件触发,若有,则重组消息发送给cef;若无,则转去执行S4。
[0013] 进一步地,在S1之前还包括:初始化cef环境,创建全局CefApp对象,开启离屏渲染,调用CefInitialize完成初始化。
[0014] 进一步地,S1中开启所述网页层的刷新定时器具体包括:调用ScheduleUpdate开启update定时器。
[0015] 进一步地,S1中创建浏览器对象具体包括:调用CefBrowserHost::CreateBrowser创建浏览器对象。
[0016] 进一步地,S3中将渲染后得到的RGBA的位图数据回调给所述网页层进一步包括:cef通过OnPaint回调出渲染后得到的RGBA的位图数据,通知网页层有数据回调。
[0017] 进一步地,在S3之前还包括:cef通过所述事件处理对象回调出网页显示的大小和位置
[0018] 进一步地,S5中所述网页层检测是否有键盘、鼠标事件触发进一步包括:所述网页层注册mouse down、move和up事件的监听,将收到的坐标封装成windows鼠标消息事件,调用cef的发送鼠标消息接口传递给cef内部响应。
[0019] 进一步地,S5中所述网页层检测是否有键盘、鼠标事件触发还进一步包括:所述网页层重定向主窗口的窗口过程,检测到键盘事件时,调用cef的发送键盘消息接口传递给cef内部响应。
[0020] 进一步地,S3中将渲染后得到的RGBA的位图数据回调给所述网页层之前还包括:判断是否有位图数据回调,当有位图数据时,将所述位图数据缓存入队列。
[0021] 进一步地,在S5步骤之后还包括:关闭主窗口时,发送退出消息给cef,等待cef退出循环,调用CefShutdown释放cef环境。
[0022] 本发明提供了一种cocos2dx嵌入cef实现透明网页的方法,包括以下步骤:S1:在cocos2dx中创建并显示网页层,开启所述网页层的刷新定时器,创建浏览器对象;S2:创建cef事件处理对象,注册所述事件处理对象到所述浏览器对象;S3:启动cef消息循环,分发处理消息,将渲染后得到的RGBA的位图数据回调给所述网页层,所述网页层将所述数据缓存到队列尾部;S4:所述网页层在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,若未创建,则使用所述数据创建背景精灵和初始化纹理,若已创建,则使用所述数据更新纹理;S5:所述网页层检测是否有键盘、鼠标事件触发,若有,则重组消息发送给cef;若无,则转去执行S4。本发明提供的cocos2dx嵌入cef实现透明网页的方法,cef启用离屏渲染功能,将网页内容渲染成RGBA的位图数据后回调给cocos2dx的layer层,在cocos2dx框架下显示位图实现透明网页的加载,填补了cocos2dx在Windows平台下内嵌web的空缺。附图说明
[0023] 图1为本发明一种cocos2dx嵌入cef实现透明网页的方法中cocos2dx和cef交互时序图。
[0024] 图2为本发明一种cocos2dx嵌入cef实现透明网页的方法的实现流程图

具体实施方式

[0025] 本发明实施例提供了一种cocos2dx嵌入cef实现透明网页的方法,cef离屏渲染回调位图数据,cocos2dx显示位图数据实现透明网页的加载,填补了cocos2dx在Windows平台下内嵌web的空缺。
[0026] 为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的首选实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
[0027] 除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
[0028] 在Windows下实现透明网页的功能,一般会从设置窗口透明度来实现,但是微软限制只能设置主窗口的透明度,无法修改子窗口透明度,因此,想要在cocos2dx主窗口以子窗口的形式嵌入cef浏览器的这一功能时不能实现透明网页的。
[0029] 另外设置窗口透明度的方法会将整个窗口都透明化,导致网页中非透明的东西显示不出来。如果采用抠颜色值的方式来时先透明,那么网页中要显示的内容不能使用该颜色值,且抠颜色的效果会出现明显的毛边。因此,想要实现透明网页的功能,只能通过cef提供的离屏渲染功能来回调出带有透明值的rgb数据,cocos2dx能够很好地显示这种数据。
[0030] 本发明实施例提供的cocos2dx嵌入cef实现透明网页的方法,采用谷歌开源浏览器框架cef3的离屏渲染功能来加载网页,并输出RGBA图像,cocos2dx来渲染该图像,当Alpha通道设置为0时,即可显示为透明。cocos2dx捕捉鼠标和键盘的输入事件,传递给cef3来完成响应。基于这种方案,可在cocos2dx框架下实现透明网页的加载,填补了cocos2dx在Windows平台下内嵌加载网页的空缺。
[0031] 请参考附图2,本发明实施例提供的cocos2dx嵌入cef实现透明网页的方法,包括以下步骤:
[0032] S100:在cocos2dx中创建并显示网页层,开启所述网页层的刷新定时器,创建浏览器对象;
[0033] S200:创建cef事件处理对象,注册所述事件处理对象到所述浏览器对象;
[0034] S300:启动cef消息循环,分发处理消息,将渲染后得到的RGBA的位图数据回调给所述网页层,所述网页层将所述数据缓存到队列尾部;
[0035] S400:所述网页层在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,若未创建,则使用所述数据创建背景精灵和初始化纹理,若已创建,则使用所述数据更新纹理;
[0036] S500:所述网页层检测是否有键盘、鼠标事件触发,若有,则重组消息发送给cef;若无,则转去执行S400。
[0037] 本发明实施例提供的cocos2dx嵌入cef实现透明网页的方法,基本实现思路为:
[0038] 初始化cef环境:创建全局CefApp对象,开启离屏渲染,调用CefInitialize完成初始化;
[0039] 在cocos2dx的layer中开启update定时器,每刷新前检查缓存队列中是否有网页数据;
[0040] 创建cef事件处理对象CefClient,调用CefBrowserHost::CreateBrowser创建浏览器,并将事件对象注册进去;
[0041] cef通过CefClient回调出来获取网页显示的大小和位置;
[0042] cef通过OnPaint回调出RGBA的网页数据,通知layer有数据回调;
[0043] layer将数据缓存到队列;
[0044] Update定时器检测到数据,初次时使用数据创建纹理和精灵,后续直接使用数据更新纹理;
[0045] layer注册mouse down,move和up事件,将收到的坐标封装成windows鼠标消息事件,调用SendMouseMoveEvent发送给cef;
[0046] layer重定向主窗口的窗口过程,检测到键盘事件时,调用SendKeyEvent转发给cef;
[0047] 主程退出时,发送退出消息给cef,并等待cef退出自身循环,调用CefShutdown释放cef环境。
[0048] 请参阅附图1中本发明实施例中cocos2dx和cef交互主要时序图,其中cocos2dx主线程的流程为:
[0049] (1)初始化,创建显示网页层layer;
[0050] (2)创建子线程用来执行cef主循环;
[0051] (3)ScheduleUpdate开启layer的update定时器,每帧刷新前检查缓存队列中是否有网页数据;
[0052] (4)调用CefBrowserHost::CreateBrowser创建浏览器对象;
[0053] (5)在update回调中检测缓存队列中是否有数据;若没有数据,则重复检测;若有数据,取出一帧图像,初始时创建纹理和背景精灵,以数据初始化纹理,后续直接更新纹理;
[0054] (6)检测是否有鼠标、键盘事件触发,若有,则重组成windows消息,发送给cef处理;若没有,则重复第(5)步。
[0055] cef子线程的流程为:
[0056] (1)初始化cef环境,开启离屏渲染,创建消息循环对象,创建ClientApp对象,调用CefInitialize完成初始化;
[0057] (2)调用cef消息循环,进入循环,分发处理消息;
[0058] (3)检测是否有位图数据回调,若有,则返回给cocos2dx主线程,主线程将数据进行缓存;
[0059] (4)检测是否退出,若是,则停止cef消息循环,释放cef环境,退出子线程。
[0060] 本发明实施例提供的cocos2dx嵌入cef实现透明网页的方法,cef启用离屏渲染功能,注册render回调。加载网页成功后,通过其渲染功能,会将网页内容渲染成RGBA的位图数据,通过render的OnPaint回调接口,将该位图数据回调给cocos2dx的layer层。layer拿到该位图数据后,先换存到内存队列尾部,然后在cocos2dx主线程中开启update定时器,在每一帧渲染前,在定时器回调中获取队列起始位图数据,更新到layer的背景精灵的纹理中,更新完后删除队首位图数据。
[0061] 对于交互事件的处理过,对于鼠标事件,在cocos2dx的layer注册mouse的down,move和up事件的监听,在回调接口中获取鼠标的坐标,然后将坐标包装成Windows的鼠标事件,调用cef的发送鼠标接口传递给cef内部响应。对于键盘事件,通过win32 API SetWindowLong重新设置cocos2dx主窗口的窗口过程函数为新的接口,在该接口中检测键盘事件,若是键盘事件,直接调用cef的发送键盘消息接口将键盘事件传递给cef内部处理。
[0062] 以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈