cocos2dx游戏以插件形式嵌入IE浏览器的实现

一、cocos2dx渲染窗口修改及导出dll

        1、思路:cocos2dx引擎使用opengl进行游戏画面的渲染,opengl的渲染窗口由其自身创建,具有跨平台性,那么我可以对渲染窗口进行修改,便可以达到将游戏窗口嵌入其他窗口的效果。

        2、实现原理:若直接设置某个窗口为opengl窗口,则可能需要手动实现被指定窗口与opengl窗口之间的消息传递等逻辑,较复杂。出于简单的考虑,我们通过指定opengl窗口父窗口达到附着在父窗口上的效果,但是父窗口与子窗口之间不存在位置绑定关系,所以我们可以先获取父窗口位置及大小,然后在opengl创建窗口时设置子窗口的位置及大小与父窗口相同,并设置子窗口置于顶层,则鼠标消息自动由原本的opengl窗口处理,无需干涉。

        3、具体细节:由于我们需要在插件中对游戏进行启动,所以需要将游戏封装为dll导出接口。我们修改cocos2dx工程目录proj.win32下的main.cpp即为游戏入口,那么我们将

修改为int cocos_main_loop_enter(HWND hParent);、void cocos_main_loop_exit();分别为启动和退出游戏接口。入口中传入游戏父窗口句柄。游戏运行时,即进入死循环,所以在插件中为了简单,直接创建独立线程,调用入口函数,线程结束后,调用游戏退出函数。

        游戏基于cocos2dx3.2,增加CCGLViewEx模块扩展自定义渲染窗口,完全无需修改引擎源码。详细请参考TaFang_dll.zip、firebreath.zip相关源码。

二、打包插件实现在线自动安装

        基于firebreath工程生成的插件是dll形式存在,并且需要在系统中注册后,才能在浏览器中运行。使用时在web页面中使用js对插件进行加载调用。为实现将插件打包成cab文件,以便于进行在线安装。实现上述需求,需要以下几个步骤:

        1、将dll制作为msi安装包;使用vs2010创建安装部署工程,将所有插件依赖的文件添加至工程中。插件主dll为npdemo.dll,属性Register设置为vsdrfCOMSelfReg,表示安装时自动对此dll进行注册。如下图:

然后编译即可生成msi安装包。

        2、打包cab文件及数字签名;

                1)makeCAB.rar为数字签名及打包所需软件,将其解压至D:\makeCAB下,并在环境变量Path中添加此路径。

                2)打包cab;在cmd中,先进入到待打包插件所在目录,该目录下包含所需资源。然后输入命令:cabarc -r -p N d:\npdemoSetup.cab *,表示对当前目录下所有文件打包为cab。

                3)对cab进行数字签名;

                        a)得到一个自认证证书TempRoot.cert,其密钥文件为TempRoot.pvk

                            命令:makecert -n "CN=TempRoot" -r -sv TempRoot.pvk TempRoot.cer

                       b)得到一个由刚才TempRoot所颁发的子证书TempCA,且被保存到"个人"证书库中

                           命令:makecert -sk TempCA -iv TempRoot.pvk -n "CN=TempCA" -ic TempRoot.cer TempCA.cer -sr currentuser -ss My

                       c)对cab签名

                          命令:signcode

将会弹出软件界面,选择需要签名的cab文件

 

选择,典型

 

选择,从存储区选择;确定

 

然后继续下一步,描述、web位置、时间戳可以默认不填。最后签名成功,弹出提示。

        3、到这里,cab打包就完成了。关于怎样部署到web服务器。原来firebreath提高的FBControl.htm测试页面,还不适用于cab的部署。部署后实现的功能为,当用户第一次打开页面时,若没有安装cab,则提示安装,安装完毕后,用户手动刷新页面即可使用插件。若用户第一次打开页面时,机器上就已经安装了cab,那么就直接启动插件,使用插件的功能。这些逻辑需要页面内js代码进行控制,所以还需要对FBControl.htm进行相应修改。

<object id="CommonDialog1" width="32" HEIGHT="32"

    classid="CLSID:B415CD14-B45D-4BCA-B552-B06175C38606"

    codebase="DemoSetup.cab"

    #Version=1,0,0,0">

</object>

上述代码为页面内请求用户安装cab的代码,CLSID为每个dll唯一,codebase为cab文件名。

可以先在本地手动注册(regsvr32 xxx.dll),然后通过注册表找到对应的dll,然后查看其CLSID。方法:cmd中输入Regedit.exe,打开注册表,ctrl+f搜索xxx.dll,找到后如图:

后面的就是CLSID。

最终的页面中将FBControl.htm和请求cab相关代码进行整合,就能实现在线自动安装插件,并使用的需求。

 

本文中涉及资源下载地址:

链接:https://pan.baidu.com/s/1og636JmZQSGKUNH4YNBTTA 
提取码:gdwh 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值