一种采用虚拟手柄控制游戏的方法与流程

文档序号:12542897阅读:1578来源:国知局
本发明涉及远程控制
技术领域
,特别涉及一种采用虚拟手柄控制游戏的方法。
背景技术
:虚拟手柄是指利用一个手机(或PAD)APP或者一个连接接在电视盒子上面的USB真实手柄,能玩连接在同一个局域网下面的远程PC上的游戏,达到像一个真实手柄连接在PC上玩游戏的一种解决方案。现有的连接方案包括采用UDP协议或者TCP协议进行控制信息的传输,其中TCP传输的特点在于:面向连接、传输可靠(保证数据正确性以及数据顺序)、用于传输大量数据、速度慢,建立连接需要开销较多(时间,系统资源)。而UDP传输的特点在于:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。现有技术关于采用UDP和TCP传输数据的方法包括:申请号为CN201410852842.X的题目为《一种基于TCP/UDP混合协议的流媒体无线自适应传输方法》的申请,其中涉及TCP/UDP混合协议的流媒体无线自适应传输方法,将TCP协议传输可靠的特点与UDP协议传输开销小、速度快、效率高特点相结合。但是由于游戏采用定时轮询获取手柄按键状态的特殊性,采用传统的UDP和TCP相结合的传输方法是不合适的。技术实现要素:有鉴于此,本发明的主要目的在于,提供一种采用虚拟手柄控制游戏的方法,包括步骤:A、虚拟手柄将控制指令分别通过TCP和UDP传输通道发送至虚拟手柄管理器;B、虚拟手柄管理器依据TCP和UDP传输通道接收控制指令的次序确定当前控制指令;C、游戏应用读取并解析所述当前控制指令,将所述控制指令与游戏动作匹配。由上,同时通过TCP和UDP传输通道向虚拟手柄管理器发送控制指令,当UDP正常传输不丢包时,保证了虚拟手柄对游戏控制的延时性大大降低;而当UDP丢包时,TCP通道的存在保证了控制指令的完整有效性。可选的,所述步骤B包括:虚拟手柄管理器查询TCP和UDP任一传输通道接收到控制指令后,查询该控制指令所对应的索引值Index,判断该控制指令的索引值indexk和前次接收到的控制指令的索引值indexk-1的大小,如果indexk>indexk-1,则将该控制指令确定为当前控制指令。由上,当通过TCP和UDP任一传输通道接收到控制指令后,首先判断该指令是不是“新”指令,若是新指令,便直接进行后续操作。由于UDP的实时性较高,保证了控制指令能尽可能快的到达虚拟手柄管理器。UDP会丢包,可由于手柄控制游戏的特殊性,只要最后一个包不丢掉顶多有一次操作时无效的,是可以接受的,最后一个包能到达是通过TCP连接来保证的。使用TCP+UDP双通道传输,如果UDP传输通道的第K+1条指令先于TCP传输通道的第K条指令,则直接处理第K+1条指令。反之UDP通道接收到第K条指令而丢失第K+1条指令,由于TCP的存在,保证第K+1条指令不会丢失,仅稍晚接收到。可选的,所述索引值Index至少包括控制指令所对应操作的数字编码以及代表控制指令次序的编号。可选的,步骤B后还包括:步骤B后还包括:虚拟手柄管理器以UDP传输通道所接收的当前控制指令为基准,控制TCP传输通道把收到的当前控制指令之前的其他控制指令直接丢弃,而不用交给游戏。附图说明图1为采用虚拟手柄控制游戏的方法的原理示意图;图2为实现虚拟手柄控制游戏的拓扑图。具体实施方式为克服现有技术存在的缺陷,本发明提供一种采用虚拟手柄控制游戏的方法。如图1所示,虚拟手柄的控制方法包括以下步骤:S11:虚拟手柄与虚拟手柄管理器建立通信连接。如图2所示为实现虚拟手柄控制游戏的拓扑图,其中,由于虚拟手柄采用手机APP或者连接在电视盒子等智能终端上的USB真实手柄。所述虚拟手柄作为DirectInput(普通游戏手柄)被识别。在进行虚拟手柄的控制前,虚拟手柄管理器首先需要与虚拟手柄建立握手通道,从而实现控制指令的接收。所述虚拟手柄管理器与游戏可统称为游戏执行端。具体的,虚拟手柄启动后,首先发送UDP管理器发送广播,用于发现可以连接的虚拟手柄管理器,当所述虚拟手柄管理器的数量多于2个时,需要用户手动选择要连接到的虚拟手柄管理器。当被选中的虚拟手柄管理器在其UDP监听端口接收到虚拟手柄所发出的广播时,给予应答。虚拟手柄接收到该应答信息后,向虚拟手柄管理器发送确认建立TCP连接请求,从而二者建立连接。所述TCP通信连接需要虚拟手柄和虚拟手柄管理器之间至少三次对话。另外,所述虚拟手柄还可以向虚拟手柄管理器的UDP发现端口直接发送控制指令。需要说明的是,虚拟手柄管理器的UDP发现端口和接受控制指令是复用的。S12:虚拟手柄通过UDP和TCP两通道同时输出控制指令。当虚拟手柄为手机(或PAD)APP实现时,APP获取用户触碰手机(或PAD)屏幕的属性,所述属性包括按下、弹起状态;按下时间等等。将上述物理操作转换为数字编码,分别同时通过步骤S11所建立的UDP和TCP通道输出上述控制指令。当虚拟手柄为连接在电视盒子等智能终端上的USB真实手柄时,智能终端接收USB真实手柄的键值变化,表示键值变化的数字编码同时通过步骤S11所建立的UDP和TCP通道输出上述控制指令。本步骤中,由于虚拟手柄产生相同的控制指令,故其通过UDP和TCP通道所输出的控制指令相同。步骤S13:虚拟手柄管理器依据接收控制指令的先后顺序确定出将要执行的控制指令。虚拟手柄管理器分别为UDP和TCP通道所接收的控制指令分配起始的索引值Index初。用于设定索引值初值,当收到新的索引值时,与Index初对比,大于Index初即认为所接收的控制指令有效。所述索引值包括各条控制指令的数字编码,索引值Index的数据量依据控制指令的增加而增加。虚拟手柄管理器在接收到控制指令时,判断当前控制指令的索引值indexk和前次所控制指令的索引值indexk-1的大小,如果indexk>indexk-1,表示第K次控制指令是当前控制指令,则更新当前控制指令indexk到共享内存中相对应的虚拟手柄的地址中去,否则,丢弃当前控制指令的索引值indexk。其中indexk表示第k条控制指令的的索引值。由于采用UDP传输时,其实时性较高,由此可以保证控制指令以最快速度到达虚拟手柄管理器。举例来说,当虚拟手柄管理器通过UDP端口率先收到第K条控制指令后,便进行指令解析以及游戏动作匹配,具体过程后文详述。此后,当虚拟手柄管理器通过TCP端口接收到第K-1条控制指令时,便直接被忽略。另一方面,由于UDP传输的局限性,其可能会产生虚拟手柄管理器接收时丢失控制指令的情况。例如,UDP通道传输时,收到第K条控制指令而丢失第K+1条控制指令,则在下次接收时,判断UDP通道的K+2条控制指令和TCP通道的K+1条控制指令的先后接收顺序,并依照接收顺序进行指令解析以及游戏动作匹配。例如,若UDP的第K+2条控制指令先来,则游戏直接执行第K+2条控制指令,而如果TCP的第K+1条指令先到,则游戏先执行第K+1条控制指令。当UDP通道的K+2条控制指令先接收到,则该控制指令中已包含K+1条控制指令,则直接忽略第K条控制指令而执行K+2条控制指令,且不会对游戏造成“不可挽回”的影响。而即便UDP通道的第K条控制指令以后全部丢包时,仍可通过TCP通道保证虚拟手柄所有控制指令均正常到达。需要理解的是,由于手柄的特殊性,上面这种跳过指令的方式对游戏来说会有几率出现错误,但不会造成“不可挽回”的影响。因为经过无论多少次手柄操作后,手柄最终的状态一定是所有按键都是弹起的。而这个弹起的控制指令,TCP保证了这个指令一定能顺利发送给游戏。相反的,假定是用另外一种不丢包的方案。假定已经收到第K个包。如果本次收到了K+2条指令,那么需要等K+1条指令后,然后分别更新K+1条指令和K+2条指令到共享内存。这么做是没有意义的,因为更新K+1条指令和K+2条指令到共享内存时间是非常短的(只有几条CPU指令),而游戏使用控制命令通常是毫秒级别的定时器,因此游戏取到的肯定也是K+2条指令,也就是说K+1条指令还是被忽略了。然后这么做还有另外一个副作用,由于K+2条指令不能及时被执行,导致后面的K+3条指令和/或K+4条指令的时间间隔发生了变化,反而导致了更多的错误。因此,本发明的方案是肯定优于不丢包方案的。即,本实施例中,采用UDP和TCP通道同时传输出控制指令,当UDP正常传输不丢包时,保证了虚拟手柄对游戏控制的延时性大大降低;而当UDP丢包时,TCP通道的存在保证了控制指令的完整有效性。例如,在步骤S13中如下表1所示分别为虚拟手柄管理器通过TCP和UDP传输通道接收到第K~K+5条控制指令的情况。TCP传输通道UDP传输通道K(第1毫秒收到)K(第0.6毫秒收到)K+1(第2毫秒收到)K+1(第0.9毫秒收到)K+2(预计第4毫秒收到)K+2(丢包)K+3(预计第7毫秒收到)K+3(丢包)K+4(预计第8毫秒收到)K+4(第2.3毫秒收到)K+5(预计第10毫秒收到)K+5(丢包)K+6(结束动作帧,预计第11毫秒收到)K+6(丢包)表1上述实施例中,采用UDP传输通道在接收第K+2、K+3、K+5和K+6条指令时均发生丢包情况。在不采用任何处理的情况下,游戏在第0.6毫秒执行第K条控制指令、0.9毫秒执行第K+1条、第2.3毫秒执行第K+4条、第10毫秒执行第K+5条、第11毫秒执行第K+6条。S14:解析所确定出的控制指令,将所述控制指令与游戏动作匹配。采用COMHOOK技术,将虚拟手柄(HOOKDirectInput)注入到游戏,且随游戏启动。所述HOOK技术用于拦截游戏对DirectInputAPI的函数调用,其中主要HOOK了EnumDevice这个函数。游戏启动后会枚举当前连接的虚拟手柄设备,HOOK技术读取虚拟手柄管理器的共享内存中虚拟手柄数量,并返回给游戏,游戏需要读取虚拟手柄数据时,HOOK技术将共享内存中的控制指令反馈给游戏,从而实现对于游戏的控制。上述虚拟手柄对于游戏的控制属于现有技术,不再赘述。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明。总之,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1