双引擎游戏内置工具栏的方法、装置及终端的制作方法_2

文档序号:9597678阅读:来源:国知局
戏进程的输入管道中的状态ID为2时,则通知所述工具栏画面读取模块从所述共享内存中读取所述当前工具栏画面到读写缓存模块中。
[0050]作为上述方案的改进,还包括工具栏画面清理模块,用于:
[0051]若所述检测模块实时检测游戏进程的输入管道中的状态ID为3时,则清理所述写缓存模块中的工具栏画面。
[0052]作为上述方案的改进,所述工具栏画面绘制模块进一步用于:
[0053]将所述当前工具栏画面进行透视化处理后呈现在所述当前游戏画面上。
[0054]作为上述方案的改进,所述工具栏进程为直播工具栏进程。
[0055]作为上述方案的改进,所述检测模块进一步用于:在游戏进程运行时,以预设频率实时检测工具栏进程的当前状态。
[0056]本发明实施例还提供了一种终端,包括如上所述的双引擎游戏内置工具栏的装置。
[0057]与现有技术相比,本发明公开的双引擎游戏内置工具栏的方法、装置以及终端,通过在游戏进程运行中实时检测工具栏进程的当前状态,并在检测到工具栏进程完成当前工具栏画面的渲染且存入游戏进程的共享内存时,将共享内存中的当前工具栏画面读取到读写缓存模块中,并基于当前运行的游戏弓I擎为2D游戏弓I擎或3D游戏引擎,调用对应的游戏引擎贴图流程以将所述当前工具栏画面绘制到当前游戏画面上。由于本发明是基于实时(检测频率较大)检测工具栏进程状态的结果,来调用当前游戏引擎对应的贴图技术将当前工具栏画面绘制到当前游戏画面上,若当前游戏引擎发生切换(例如,从2D游戏引擎切换到3D游戏引擎),则会根据实时(检测频率较大)检测工具栏进程状态的结果调用引擎切换后所对应的3D游戏引擎贴图流程,以将当前工具栏画面绘制到当前游戏画面上,从而保证游戏在两个游戏引擎之间切换时,工具栏也和游戏一样平滑切换,使玩家的操作不会受切换过程的影响,也不会感觉到工具栏发生变化。
【附图说明】
[0058]图1是本发明实施例一种双引擎游戏内置工具栏的方法的流程示意图。
[0059]图2是本发明实施例一种双引擎游戏内置工具栏的方法中的游戏进程与工具栏进程之间的通信过程示意图。
[0060]图3a?图3b分别为本发明实施例中的2D游戏引擎原绘制流程以及初始化后的2D游戏引擎贴图流程的流程示意图。
[0061]图4a?图4b分别为本发明实施例中的3D游戏引擎原绘制流程以及初始化后的3D游戏引擎贴图流程的流程示意图。
[0062]图5是本发明实施例中一种双引擎游戏内置工具栏的装置的结构框图。
【具体实施方式】
[0063]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0064]参见图1,是本发明实施例提供的一种双引擎游戏内置工具栏的方法的流程示意图。本实施例是针对于在双引擎游戏中内置工具栏,若游戏在两个游戏引擎之间切换时,工具栏也和游戏一样平滑切换,使玩家的操作不会受切换过程的影响,也不会感觉到工具栏发生变化。如图1所示,本发明实施例提供的一种双引擎游戏内置工具栏的方法包括步骤S101 ?S103:
[0065]S101、在游戏进程运行时,实时检测工具栏进程的当前状态。
[0066]其中,本实施的工具栏是由独立于游戏进程的外部工具栏进程来实现的,例如,直播客户端。通过直播客户端的工具栏模块执行工具栏的具体功能(如关闭直播,启动摄像头等)和渲染工具栏画面,将渲染出来的工具栏画面图片通过进程间通讯的方式传送给游戏进程中的内存,然后由游戏进程来读取内存中的工具栏画面并绘制到游戏画面上。因此,游戏进程需要实时监测工具栏进程的状态,根据不同的状态执行相应的操作。
[0067]具体的,在游戏进程运行时,通过实时检测游戏进程与工具栏进程之间创建的匿名管道(anonymous pipe)中的状态ID来确定工具栏进程的当前状态;其中,所述状态ID由工具栏进程生成并送入所述匿名管道中:若工具栏启动,所述工具栏进程生成的状态ID为1 ;若当前工具栏画面生成并写入所述共享内存中,所述工具栏进程生成的状态ID为2 ;若工具栏关闭,所述工具栏进程生成的状态ID为3。可以理解的,也可以用其他数字在表示不同的状态。
[0068]参考图2,在游戏进程和工具栏进程均启动后,两个进程保持通信。具体的,游戏进程通过一定频率实时检测游戏进程与工具栏进程之间创建的匿名管道(anonymous pipe)中的状态ID确定工具栏当前状态。当工具栏进程启动时,会生成状态ID = 1并通过所述匿名管道(对于工具栏进程来说,该匿名管道为输出管道)通知游戏进程。而游戏进程若实时检测所述匿名管道(对于游戏进程来说,该匿名管道为输入管道)中的状态ID为1时,则对2D游戏引擎贴图流程和3D游戏引擎贴图流程进行初始化。
[0069]请参考图3a?3b,对2D游戏引擎贴图流程进行初始化是指对2D游戏引擎原绘制流程(如图3a所示)进行修改以得到对应的2D游戏引擎贴图流程(如图3b所示)。可以理解的,2D游戏引擎原绘制流程用于绘制没有插入直播工具栏的游戏画面,而2D游戏引擎贴图流程用于绘制插入直播工具栏的游戏画面。初始化过程如下:
[0070]通过API HOOK技术,对2D游戏引擎原绘制流程进行修改,在绘制游戏画面前先跳转到执行工具栏画面的绘制,并在工具栏画面绘制完毕后再跳转回去执行游戏画面的绘制,从而得到所述2D游戏引擎贴图流程。
[0071]其中,所述2D游戏引擎原绘图流程通过IDirectDrawSurface7::Unlock(纯虚函数)来实现游戏画面的绘制。而所述2D游戏引擎贴图流程主要通过API Hook技术,在绘制游戏画面(即调用图3a中的Unlock函数,Hook后变为OrigUnlock函数)前先跳转执行工具栏画面的绘制函数(图3b中的MyUnlock函数),待工具栏画面绘制完毕后,再跳转回执行游戏画面的绘制(图3b中的OrigUnlock函数)。相当于在游戏画面绘制前,插入了工具栏画面的绘制操作。
[0072]请参考图4a?4b,对3D游戏引擎贴图流程进行初始化是指对3D游戏引擎原绘制流程(如图4a所示)进行修改以得到对应的3D游戏引擎贴图流程(如图4b所示)。可以理解的,3D游戏引擎原绘制流程用于绘制没有插入直播工具栏的游戏画面,而3D游戏引擎贴图流程用于绘制插入直播工具栏的游戏画面。初始化过程如下:
[0073]通过API Η00Κ技术,对3D游戏引擎原绘制流程进行修改,在绘制游戏画面前先跳转到执行工具栏画面的绘制,并在工具栏画面绘制完毕后再跳转回去执行游戏画面的绘制,从而得到所述3D游戏引擎贴图流程。
[0074]所述3D游戏引擎原绘图流程通过IDirect3DDevice9::Present函数来实现游戏画面的绘制。而所述3D游戏引擎贴图流程主要通过API Hook技术,在绘制游戏画面(即调用图4a中的Present函数,Hook后变为OrigPresent函数)前先跳转执行工具栏画面的绘制函数(图4b中的MyPresent函数),待工具栏画面绘制完毕后,再跳转回执行游戏画面的绘制(图4b中的OrigPresent函数)。相当于在游戏画面绘制前,插入了工具栏画面的绘制操作。
[0075]需要说明的是,API HOOK技术是一种用于改变API执行结果的技术。通常实现方式是将原API的代码的前面N个字节,修改为一条JMP指令,跳转到我们自定义的函数,执行完自己需要的操作后,再跳转回原API继续执行。
[0076]返回参考图2,在工具栏进程启动后,工具栏进程根据预设规则来完成当前工具栏画面的渲染,并将渲染完成后的当前工具栏画面(图片格式)通过进程间通讯的方式进入读写缓冲交换模块,从而写入游戏进程的共享内存中。其中,工具栏画面的渲染的预设规则可为按照一定频率进行或者在接收到触发事件(例如,玩家发起的聊天等)进行。另外,工具栏进程完成当前工具栏画面
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1