CN112370787A - 虚拟角色的控制方法、计算机可读存储介质及处理器 - Google Patents
虚拟角色的控制方法、计算机可读存储介质及处理器 Download PDFInfo
- Publication number
- CN112370787A CN112370787A CN202011287359.3A CN202011287359A CN112370787A CN 112370787 A CN112370787 A CN 112370787A CN 202011287359 A CN202011287359 A CN 202011287359A CN 112370787 A CN112370787 A CN 112370787A
- Authority
- CN
- China
- Prior art keywords
- virtual character
- flight
- waypoint
- determining
- abnormal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 128
- 230000002159 abnormal effect Effects 0.000 claims abstract description 98
- 230000009471 action Effects 0.000 claims abstract description 86
- 230000008569 process Effects 0.000 claims abstract description 47
- 238000001514 detection method Methods 0.000 claims description 34
- 230000005856 abnormality Effects 0.000 claims 2
- 238000004364 calculation method Methods 0.000 abstract description 20
- 238000005516 engineering process Methods 0.000 abstract description 7
- 230000009191 jumping Effects 0.000 description 12
- 230000008859 change Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000035772 mutation Effects 0.000 description 3
- 238000005293 physical law Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000005034 decoration Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008447 perception Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004366 reverse phase liquid chromatography Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/55—Controlling game characters or game objects based on the game progress
- A63F13/56—Computing the motion of game characters with respect to other game characters, game objects or elements of the game scene, e.g. for simulating the behaviour of a group of virtual soldiers or for path finding
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/55—Controlling game characters or game objects based on the game progress
- A63F13/57—Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game
- A63F13/577—Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game using determination of contact between game characters or objects, e.g. to avoid collision between virtual racing cars
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/64—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种虚拟角色的控制方法、计算机可读存储介质及处理器。其中,该方法包括:在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第一飞行状态是否出现异常;当检测到第一飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点;控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。本发明解决了相关技术中虚拟角色的避障控制方法的计算开销较大的技术问题。
Description
技术领域
本发明涉及互联网技术领域,具体而言,涉及一种虚拟角色的控制方法、计算机可读存储介质及处理器。
背景技术
对于三维游戏,虚拟角色在高空进行飞行是常见需求,而游戏场景内的各类组件通常都带有符合组件外观的碰撞体,虚拟角色在飞行时接触到场景内的碰撞体或者飞行至一些无法行走的区域时无法继续移动,需要进行避障操作,也即从任意位置通过一定的规则找出合法落点,并控制虚拟角色降落至该落点上。但是,避障方案计算开销较大,导致影响飞行过程中虚拟角色的表现。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种虚拟角色的控制方法、计算机可读存储介质及处理器,以至少解决相关技术中虚拟角色的避障控制方法的计算开销较大的技术问题。
根据本发明实施例的一个方面,提供了一种虚拟角色的控制方法,应用于服务器,该方法包括:在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第一飞行状态是否出现异常;当检测到第一飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点;控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
可选地,基于虚拟角色的飞行方向确定目标路点包括:基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹;获取位于第一飞行轨迹的预设方向上的至少一个预设路点;从至少一个预设路点中确定目标路点。
可选地,在检测到虚拟角色飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体发生碰撞的情况下,基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:获取虚拟角色与碰撞体发生碰撞时所处的第一位置;基于飞行方向,确定虚拟角色飞行至第一位置的轨迹,得到第一飞行轨迹。
可选地,在检测到虚拟角色飞行至下一时刻到达的位置位于游戏场景的边界之外的情况下,基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:基于飞行方向,确定虚拟角色飞行至下一时刻到达的位置的第二飞行轨迹;获取第二飞行轨迹中位于边界之内,且距离下一时刻到达的位置最近的第二位置;基于飞行方向,确定虚拟角色飞行至第二位置的轨迹,得到第一飞行轨迹。
可选地,在检测到虚拟角色飞行至下一时刻到达的位置存在非法路点的情况下,基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:获取虚拟角色当前所处的位置,得到第一飞行轨迹。
可选地,从至少一个预设路点中确定目标路点包括:获取从至少一个预设路点中,满足第二预设条件的目标预设路点;按照从下一时刻到达的位置至虚拟角色当前所处的位置的顺序,确定第一个目标预设路点为目标路点。
可选地,满足第二预设条件包括:在虚拟角色降落至目标预设路点对应的位置的过程中,虚拟角色与游戏场景中的其他碰撞体未发生碰撞,且,目标预设路点周围存在移动空间,其中,移动空间为允许虚拟角色移动的空间。
可选地,检测虚拟角色的第一飞行状态是否出现异常包括:获取虚拟角色当前所处的当前所处的位置;基于虚拟角色的飞行参数,确定虚拟角色在下一时刻到达的位置;检测下一时刻到达的位置是否满足第一预设条件,其中,第一预设条件用于确定第一飞行状态出现异常;如果检测到下一时刻到达的位置满足第一预设条件,则确定第一飞行状态出现异常。
可选地,检测下一时刻到达的位置是否满足第一预设条件包括:检测虚拟角色从当前所处的位置飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体是否发生碰撞;和/或检测下一时刻到达的位置是否位于游戏场景的边界之外;和/或检测下一时刻到达的位置是否存在非法路点;如果检测到虚拟角色与其他碰撞体发生碰撞,或,下一时刻到达的位置位于边界之外,或,下一时刻到达的位置存在非法路点,则确定下一时刻到达的位置满足第一预设条件。
可选地,检测下一时刻到达的位置是否存在非法路点包括:获取当前所处的位置对应的第一路点,以及下一时刻到达的位置对应的第二路点;确定当前所处的位置的纵坐标是否大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标是否大于第二路点的纵坐标;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标大于第二路点的纵坐标,则确定下一时刻到达的位置不存在非法路点;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标小于第二路点的纵坐标,则确定下一时刻到达的位置存在非法路点。
可选地,在控制虚拟角色执行飞行动作之前,该方法还包括:检测游戏场景中是否存在目标区域,其中,目标区域的尺寸大于预设尺寸,目标区域内不存在路点,且目标区域的底部与目标区域之外的其他位置的距离大于预设距离;如果检测到游戏场景内存在目标区域,基于虚拟角色的飞行参数,确定虚拟角色的飞行终点;确定飞行终点是否位于目标区域之内;如果飞行终点位于目标区域之内,则基于飞行参数,确定目标路点;控制虚拟角色执行飞行动作,并飞行至目标路点对应的位置。
可选地,如果检测到游戏场景内不存在目标区域,或飞行终点位于目标区域之外,则控制虚拟角色执行飞行动作。
可选地,该方法还包括:当控制虚拟角色开始执行飞行动作时,发送第一消息至客户端,其中,客户端用于在接收到第一消息之后,控制虚拟角色开始执行飞行动作,虚拟角色显示在客户端中;当检测到第一飞行状态出现异常时,发送第二消息至客户端,其中,客户端用于当检测到虚拟角色的第二飞行状态出现异常,且接收到第二消息时,控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
可选地,在控制虚拟角色开始执行飞行动作之前,同步虚拟角色的当前所处的位置和当前朝向至客户端,并基于当前所处的位置和当前朝向控制虚拟角色开始执行飞行动作,其中,客户端用于基于当前所处的位置和当前朝向控制虚拟角色开始执行飞行动作。
可选地,服务器的第一定时器的时间间隔小于或等于客户端的第二定时器的时间间隔。
可选地,按照预设时间间隔发送第一消息,其中,当检测到第一飞行状态出现异常时,发送当前缓存的所有第一消息。
根据本发明实施例的另一方面,还提供了一种虚拟角色的控制方法,应用于客户端,该方法包括:在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第二飞行状态是否出现异常,其中,虚拟角色显示在客户端中;当检测到第二飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点;控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
可选地,基于虚拟角色的飞行方向确定目标路点包括:基于飞行方向,确定第二飞行状态出现异常之前,虚拟角色的第一飞行轨迹;获取位于第一飞行轨迹的预设方向上的至少一个预设路点;从至少一个预设路点中确定目标路点。
可选地,该方法还包括:当接收到服务器发送的第一消息时,控制虚拟角色开始执行飞行动作,其中,第一消息由服务器当控制虚拟角色开始执行飞行动作时发送;当检测到虚拟角色的第二飞行状态出现异常,且接收到服务器发送的第二消息时,控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置,其中,第二消息由服务器当检测到虚拟角色的第一飞行状态出现异常时发送。
可选地,在检测到第二飞行状态出现异常,且未接收到第二消息的情况下,停止更新虚拟角色的位置。
可选地,该方法还包括:接收服务器同步的虚拟角色的第一位置和第一朝向;获取虚拟角色的第二位置和第二朝向;基于第一位置和第二位置之间的位置偏差,以及第一朝向和第二朝向之间的朝向偏差,控制虚拟角色开始执行飞行动作。
根据本发明实施例的另一方面,还提供了一种虚拟角色的控制装置,应用于服务器,装置包括:状态检测模块,用于在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第一飞行状态是否出现异常;路点确定模块,用于当检测到第一飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点;控制模块,用于控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
根据本发明实施例的另一方面,还提供了一种虚拟角色的控制装置,应用于客户端,装置包括:状态检测模块,用于在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第二飞行状态是否出现异常,其中,虚拟角色显示在客户端中;路点确定模块,用于当检测到第二飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点;控制模块,用于控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,在程序运行时控制计算机可读存储介质所在设备执行上述的虚拟角色的控制方法。
根据本发明实施例的另一方面,还提供了一种处理器,处理器用于运行程序,其中,程序运行时执行上述的虚拟角色的控制方法。
在本发明实施例中,在控制虚拟角色执行飞行动作的过程中,当检测到虚拟角色的飞行状态出现异常时,可以基于虚拟角色的飞行方向搜索满足条件的目标路点,并将目标路点对应的位置确定为合法落点,进一步控制虚拟角色降落至该合法落点上,从而实现虚拟角色的避障目的。与相关技术相比,基于虚拟角色的飞行方向搜索目标路点,无需对虚拟角色周围的整个环形范围进行搜索,从而达到了确保虚拟角色表现符合物理定律的同时,降低计算开销的技术效果,进而解决了相关技术中虚拟角色的避障控制方法的计算开销较大的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种虚拟角色的控制方法的流程图;
图2是根据本发明实施例的一种可选的飞行状态检测方法的流程图;
图3是根据本发明实施例的一种可选的基于优先方向的避障方案的示意图;
图4是根据本发明实施例的一种可选的客户端-服务器之间消息通信的示意图;
图5是根据本发明实施例的另一种虚拟角色的控制方法的流程图;
图6是根据本发明实施例的一种虚拟角色的控制装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在三维游戏中,游戏场景内的各类组件通常都带有符合组件外观的碰撞体。虚拟角色在三维空间飞行时接触到场景内的碰撞体时,无法继续移动,此时虚拟角色的位置通常在三维空间中一些不能行走的区域中,其中,可以采用该区域内的每个位置是否带有路点来描述该区域是否为可行走区域。另外,合法落点需要满足三个条件:虚拟角色停留在落点上时碰撞体与游戏场景内的其他碰撞体不发生碰撞;落点上存在路点;落点位置位于预设的游戏场景的边界内。
目前可以采用如下两种避障方案实现虚拟角色的避障操作:第一种方案为离线生成可行走区域,该方案依赖游戏场景内的路点,当虚拟角色碰撞到游戏场景内的其他碰撞体时,以碰撞位置为圆心,半径从小到大搜索环形范围内存在路点的位置;第二种方案为基于路点与碰撞检测的避障方案,该方案仍然以碰撞位置为圆心,半径从小到大搜索环形范围内存在路点的位置,同时检测落点的路点是否存在以及碰撞位置到落点之间是否存在碰撞。
但是,对于第一种方案,由于游戏场景内的路点是根据既定的碰撞体采用寻路算法离线生成、或者由美术人员通过编辑器预先设置的,无法保证其他碰撞体尺寸的虚拟角色在路点位置与游戏场景内其他碰撞体不存在碰撞相交,因此,该方案存在路点可靠性问题。而对于第二种方案,该方案可以在一定程序保证能够查找到合法落点,但是,采用环形搜索方法的搜索开销较大,且不满足三维飞行中按照飞行方向优先的避障需求。
另外,相比与无需联网的单机游戏和网络延迟稳定的PC游戏,依赖无线连接技术连接网络服务器的手机游戏受到网络环境出现的不稳定情况的影响,数据包通过该网络的传输时间存在较大波动。目前手游普遍采用客户端-服务器(client-server)架构,客户端和服务器需要维护相同的虚拟角色的位置与朝向。当飞行速度较快时,客户端计算出的位置与服务器计算出的位置差异较大,对于多段衔接的跳跃过程,需要保证客户端中虚拟角色的位置过渡平滑。因此,需要设计客户端与服务器的位置同步方案。
目前可以采用如下两种位置同步方案实现客户端与服务器之间的位置同步:第一种方案为客户端检测并同步,在该方案下,飞行过程中的位置计算、碰撞检测、出界判定等都由客户端运行,当飞行状态发生变化时,由客户端发送最新的飞行信息给服务器再广播给其他客户端;第二种方案为服务器、客户端并行检测,客户端决定,该方案要求服务器、客户端同时检测飞行状态变化,最终结果由客户端决定,当服务器检测到虚拟角色碰撞到其他碰撞体或出界时,虚拟角色的位置停止更新,等待客户端的最终结果后在广播给其他客户端。
采用第一种方案可以实现飞行状态的第一时间感知,但是,当一场战斗存在多客户端时,需要按照一定策略选择客户端负责检测并将飞行状态发送到服务端,由于网络层面的延时波动、性能方面的卡顿与低帧率导致客户端不可靠,最终导致服务器无法收到正确的飞行状态而影响游戏结果。采用第二种方案保证客户端的低延时体验,但是仍然无法解决不可靠客户端的问题,例如,在飞行过程中客户端突然断网,导致服务器和客户端将在碰到游戏场景内的碰撞体时无法正常结束而卡在控制。
为了解决上述问题,本发明实施例提出了一种基于碰撞检测和路点的碰撞避免与寻找合法落点的方案,包括时间补偿、位置差异延后补偿、服务器先行、落点预测等若干技术点,该方案可以确保虚拟角色自由飞行,及时检测到障碍物、不可达区域并确定可以移动的合法落点,可以在确保虚拟角色表现符合物理定律的同时,在较小计算开销下确定合法落点。
另外,本发明实施例还提出了一种服务器-客户端并行检测且服务器角色的位置同步方案,可以在保证低延迟的游戏体验下,解决相关技术中不可靠客户端、客户端-服务器位置不一致和客户端位置突变的问题。
需要说明的是,上述两个方案不存在游戏场景和虚拟角色的定制规则,可以应用于不同三维游戏中,可以扩展并满足其他三维空间位移需求。
根据本发明实施例,提供了一种虚拟角色的控制方法,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
可选的,该方法可以应用于服务器。具体地,该方法可以包括虚拟角色的避障控制方法以及位置同步方法,其中,虚拟角色的避障控制方法同样可以应用于客户端中,因此,在应用于客户端的实施例中,对于虚拟角色的避障控制方法不作赘述,主要参见本实施例中的相关描述。
图1是根据本发明实施例的一种虚拟角色的控制方法的流程图,如图1所示,该方法包括如下步骤:
步骤S102,在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第一飞行状态是否出现异常。
上述步骤中的虚拟角色可以是用户在手游中控制的虚拟人物,在客户端-服务器架构中,客户端和服务器可以分别对相同的虚拟角色进行控制,用户可以在客户端的游戏交互界面中实时查看控制结果,也即,客户端可以显示虚拟角色。
上述步骤中的飞行动作可以是指包括跳跃在内的空中移动的动作,例如,高空跳跃、跳伞等,在本发明实施例中,以高空跳跃为例进行说明。
在不同三维游戏中,用户可以通过操作控制虚拟角色执行不同动作,具体地,在手游中,游戏交互界面中往往会显示多个操作控件,用户可以通过点击、滑动的方式触发不同的操作控件,从而控制虚拟角色执行不同的动作。
例如,对于具有轻功跳跃功能的三维手游,游戏交互界面中可以显示技能控件、普通攻击控件、跳跃控件、急速奔跑控件等,当用户希望展示虚拟角色的轻功时,可以点击跳跃控件同时按压方向控件,还可以点击急速奔跑按钮,并点击跳跃控件同时按压方向控件。需要说明的是,在第一次使用轻功跳跃落地之后继续点击跳跃控件可以实现多段跳目的,游戏中往往设置最多可以进行三段跳。
在一种可选的实施例中,服务器在接收到高空跳跃飞行的动作指令之后,可以控制虚拟角色执行飞行动作,也即,可以按照操作指令对应的起跳位置和起跳方向计算每一帧中虚拟角色的位置,并基于每一帧中虚拟角色的位置控制虚拟角色飞行。
由于客户端和服务器可以分别对相同的虚拟角色进行控制,为了将客户端和服务器中的控制过程进行区分,在本实施例中,可以将服务器控制的虚拟角色的飞行状态称作第一飞行状态,客户端控制的虚拟角色的飞行状态称作第二飞行状态。
上述步骤中的飞行状态出现异常可以是指飞行过程中碰到游戏场景中的其他障碍物,或飞行至不可行走区域内,但不仅限于此,也可以是影响高空跳跃飞行的其他条件。由于虚拟角色的起跳位置和起跳方向由用户人为操作,因此,虚拟角色在飞行过程中,飞行状态可以能会发生异常,需要进行避障控制。
步骤S104,当检测到第一飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点。
上述步骤中的飞行方向可以是虚拟角色的起跳方向,也可以是虚拟角色在飞行过程中由用户人为操作的方向,例如,用户人为操作虚拟角色向前跳起之后,又人为操作虚拟角色向后飞行,此时,虚拟角色的起跳方向为前方,飞行方向为后方。
由于虚拟角色的飞行状态出现异常之后,无法控制虚拟角色继续飞行,因此,需要通过计算确定出虚拟角色的合法落点,该合法落点满足上述的三个条件:虚拟角色停留在落点上时碰撞体与游戏场景内的其他碰撞体不发生碰撞;落点上存在路点;落点位置位于预设的游戏场景的边界内。因此,可以确定合法落点可以是存在路点,虚拟角色可以自由移动,不会卡住的位置。在此基础上,可以通过寻找满足上述条件的路点的方式,实现寻找合法落点的目的。
上述步骤中的目标路点可以是通过计算确定出的合法落点上存在的路点。由于虚拟角色只能降落至低于当前位置的其他位置,因此,目标路点可以是指虚拟角色下方的路点。
步骤S106,控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
上述步骤中的目标路点对应的位置可以是通过计算确定出的合法落点。
在一种可选的实施例中,在确定出目标路点之后,可以确定该目标路点所在的位置为合法落点,并控制虚拟角色降落至该合法落点,结束整个高空跳跃飞行的过程。
通过本发明上述实施例,在控制虚拟角色执行飞行动作的过程中,当检测到虚拟角色的飞行状态出现异常时,可以基于虚拟角色的飞行方向搜索满足条件的目标路点,并将目标路点对应的位置确定为合法落点,进一步控制虚拟角色降落至该合法落点上,从而实现虚拟角色的避障目的。与相关技术相比,基于虚拟角色的飞行方向搜索目标路点,无需对虚拟角色周围的整个环形范围进行搜索,从而达到了确保虚拟角色表现符合物理定律的同时,降低计算开销的技术效果,进而解决了相关技术中虚拟角色的避障控制方法的计算开销较大的技术问题。
在本发明上述实施例中,基于虚拟角色的飞行方向确定目标路点包括:基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹;获取位于第一飞行轨迹的预设方向上的至少一个预设路点;从至少一个预设路点中确定目标路点。
上述步骤中的预设路点可以是游戏场景中预先设定的可行走区域中的路点,不同游戏场景中的可行走区域不同,例如,当游戏场景中存在多层建筑物,则建筑物的每层楼板都可以作为一个可行走区域,同样的,建筑物的房顶或者阳台也可以作为可行走区域。需要说明的是,如果虚拟角色在低楼层的可行走区域中跳跃,则无法穿过碰撞体到达上层的可行走区域。
虚拟角色是按照飞行方向飞行的,在飞行过程中,虚拟角色经过的多个位置的连线即构成了虚拟角色的飞行轨迹,因此,上述的第一飞行轨迹由多个飞行位置连接构成,可以看作是空中的一条曲线。
上述步骤中的预设方向可以是指第一飞行轨迹的下方。
在一种可选的实施例中,在第一飞行状态出现异常之前,虚拟角色可以正常飞行,因此可以基于飞行方向确定第一飞行轨迹,当第一飞行状态出现异常时,需要进行避障操作,可以通过对第一飞行轨迹进行回溯的方法,对第一飞行轨迹下方的路点进行筛选,从而得到目标路点。
在本发明上述实施例中,在检测到虚拟角色飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体发生碰撞的情况下,基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:获取虚拟角色与碰撞体发生碰撞时所处的第一位置;基于飞行方向,确定虚拟角色飞行至第一位置的轨迹,得到第一飞行轨迹。
上述步骤中的其他碰撞体可以是游戏场景内的其他虚拟角色的碰撞体,也可以是游戏场景内建筑物、树等组件的碰撞体,本发明对此不作具体限定。
由于碰撞发生之后,虚拟角色无法继续飞行,因此,可以确定合法落点必然位于碰撞发生时刻之前,可以通过获取当前所处的位置至第一位置之间的飞行轨迹,确定位于飞行轨迹下方的所有路点为预设路点。虚拟角色的飞行轨迹由多个线段拼接而成,每个线段的两个端点为计算出的两个位置,因此,可以通过计算从当前所处的位置至第一位置之间的所有虚拟角色会经过的位置,从而可以得到上述的第一飞行轨迹。
需要说明的是,虚拟角色降落一般为垂直降落,可以基于第一飞行轨迹中的每一个飞行位置,确定位于该飞行位置正下方的路点作为预设路点。
在本发明上述实施例中,在检测到虚拟角色飞行至下一时刻到达的位置位于游戏场景的边界之外的情况下,基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:基于飞行方向,确定虚拟角色飞行至下一时刻到达的位置的第二飞行轨迹;获取第二飞行轨迹中位于边界之内,且距离下一时刻到达的位置最近的第二位置;基于飞行方向,确定虚拟角色飞行至第二位置的轨迹,得到第一飞行轨迹。
不同游戏场景,需要预先设置其边界,避免虚拟角色运动至游戏场景之外,不符合逻辑。例如,对于具有轻功跳跃功能的三维手游,由于用户可以控制虚拟角色通过轻功跳跃到建筑物、树等固定组件上,因此,可以在游戏场景边缘处设置一个规则的矩形边界,用户无法通过轻功跳跃或移动至该边界之外,类似于在游戏场景的边缘处设置一个透明的长方体,所有虚拟角色只能在该长方体内部移动或跳跃。
由于虚拟角色无法飞行或移动至游戏场景的边界之外,因此,可以确定合法落点必然位于游戏场景的边界之内,上述步骤中的第二位置可以是虚拟角色能够飞行的最远位置,也即,第二位置可以是第二飞行轨迹中最后一个位于边界之内的位置。进一步通过获取当前所处的位置至第二位置之间的飞行轨迹,确定位于飞行轨迹下方的所有路点为预设路点。
需要说明的是,可以通过二分查找法确定第二飞行轨迹中的第四位置。
在本发明上述实施例中,在检测到虚拟角色飞行至下一时刻到达的位置存在非法路点的情况下,基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:获取虚拟角色当前所处的位置,得到第一飞行轨迹。
在有些游戏场景中地面可以作为可行走区域,也即,地面上存在路点,且不存在碰撞体,但是,由于虚拟角色的飞行轨迹中的每个位置是逐帧计算的,因此,在上述游戏场景中,可能会出现当前帧中虚拟角色的位置位于地面的上方,但是,计算出的下一帧位置位于地面的下方,导致下一帧中虚拟角色被地面分割,不满足游戏逻辑。因此,上述步骤中的非法路点可以是指不满足游戏逻辑的路点。
对于存在非法路点的位置,为了确保虚拟角色的显示合理,因此,可以直接将当前所处的位置正下方的路点作为预设路点。
在本发明上述实施例中,从至少一个预设路点中确定目标路点包括:获取从至少一个预设路点中,满足第二预设条件的目标预设路点;按照从下一时刻到达的位置至当前所处的位置的顺序,确定第一个目标预设路点为目标路点。
可选的,满足第二预设条件可以包括:在虚拟角色降落至目标预设路点的过程中,虚拟角色与游戏场景中的其他碰撞体未发生碰撞,且,目标预设路点周围存在移动空间,其中,移动空间为允许虚拟角色移动的空间。
例如,在存在多层建筑物的游戏场景中,用户可以控制虚拟角色从建筑物的某层楼板上跳跃,但是,虚拟角色无法穿过楼板降落至下一层楼板上。又例如,用户可以控制虚拟角色跳跃,但是,虚拟角色不能降落至两个无法移动的物体之间,否者虚拟角色下落后会卡死无法移动。因此,首先可以通过碰撞检测确定每个预设路点与相应的飞行位置之间是否存在碰撞,然后判断每个预设路点周围是否存在移动空间,只有预设路点与相应的飞行位置之间不存在碰撞,且该预设路点周围存在移动空间,才可以确定该预设路点为目标预设路点。
为了提升高空跳跃飞行,用户希望可以控制虚拟角色飞行最远的距离,因此,可以通过飞行轨迹回溯(也即,从下一帧位置往前计算)的方式查找第一个合法落点,使得该合法落点距离虚拟角色的起跳位置最远。
在本发明上述实施例中,检测虚拟角色的第一飞行状态是否出现异常包括:获取虚拟角色当前所处的当前所处的位置;基于虚拟角色的飞行参数,确定虚拟角色在下一时刻到达的下一时刻到达的位置;检测下一时刻到达的位置是否满足第一预设条件,其中,第一预设条件用于确定第一飞行状态出现异常;如果检测到下一时刻到达的位置满足第一预设条件,则确定第一飞行状态出现异常。
基于高空跳跃的原理可知,虚拟角色在开始执行飞行动作之后,虚拟角色会腾空飞行一段时间,虚拟角色的飞行轨迹是线段拼接而成的,相邻两帧中虚拟角色的位置为相应线段的两个端点,因此,虚拟角色的飞行轨迹中包含有多个不同的飞行位置。服务器和客户端可以采用逐帧计算的方式,基于每一帧中虚拟角色所处的当前位置,计算得到下一帧位置,并基于下一帧位置进行虚拟角色的位置更新。因此,上述步骤中的当前所处的位置可以是每一帧中虚拟角色所处的当前位置,下一时刻到达的位置可以是计算得到的下一帧位置。下一时刻可以是下一帧对应的时刻。
上述步骤中的第一预设条件可以是预先基于高空跳跃的原理,确定的飞行状态检测条件,当虚拟角色的飞行状态满足该条件时,可以确定虚拟角色的飞行状态出现异常,在本发明实施例中,第一预设条件可以包括:下一时刻到达的位置处,虚拟角色的碰撞体会与游戏场景中其他碰撞体发生碰撞,例如,下一时刻到达的位置处,虚拟角色的碰撞体与其他虚拟角色的碰撞体发生碰撞,或者,虚拟角色的碰撞体与建筑物的外墙的碰撞体发生碰撞;下一时刻到达的位置超出游戏场景的边界;下一时刻到达的位置对应的路点检测非法,例如,当前所处的位置处,虚拟角色已接近地面,而下一时刻到达的位置处,虚拟角色会陷入地面,如虚拟角色的脚步位于地面所在平面的下方。
需要说明的是,对于客户端和服务器,飞行状态检测的逻辑完全一致,区别在于客户端检测到异常状态之后会停止虚拟角色的位置更新,而服务器会寻找合法落点进行避障。
在本发明上述实施例中,检测下一时刻到达的位置是否满足第一预设条件包括:检测虚拟角色从当前所处的位置飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体是否发生碰撞;和/或检测下一时刻到达的位置是否位于游戏场景的边界之外;和/或检测下一时刻到达的位置是否存在非法路点;如果检测到虚拟角色与其他碰撞体发生碰撞,或,下一时刻到达的位置位于边界之外,或,下一时刻到达的位置存在非法路点,则确定下一时刻到达的位置满足第一预设条件。
碰撞体之间的碰撞检测方案可以采用现有方案实现,本发明对此不作具体限定,例如,可以通过判断碰撞体之间是否会出现交叉的方式,达到碰撞检测的目的。
需要说明的是,上述碰撞检测步骤可以根据需要调整检测条件之间的顺序,并且可以对检测条件进行增加、修改或删除,但不仅限于此。
在本发明上述实施例中,检测下一时刻到达的位置是否存在非法路点包括:获取当前所处的位置对应的第一路点,以及下一时刻到达的位置对应的第二路点;确定当前所处的位置的纵坐标是否大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标是否大于第二路点的纵坐标;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标大于第二路点的纵坐标,则确定下一时刻到达的位置不存在非法路点;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标小于第二路点的纵坐标,则确定下一时刻到达的位置存在非法路点。
上述步骤中的第一路点可以是当前所处的位置上或者当前所处的位置附近的路点,第二路点可以是下一时刻到达的位置上或下一时刻到达的位置附近的路点。
例如,仍以游戏场景中地面上存在路点且不存在碰撞体为例进行说明,如果一个位置的纵坐标大于相应路点的纵坐标,则表明该位置位于该路点的上方,也即该位置位于地面的上方,此时,虚拟角色可以降落至地面上;如果一个位置的纵坐标小于相应路点的纵坐标,则表明该位置位于该路点的下方,也即,该位置位于地面的下方,导致该位置存在非法路点。
下面结合图2和图3对本发明一种优选的实施例进行详细说明。
如图2所示,在每一帧内,当前位置和计算后的下一帧位置分别记为cur_pos与next_pos。检测虚拟角色的碰撞体从cur_pos到next_pos是否存在碰撞。
如果不存在碰撞且next_pos已经在游戏场景的边界之外,则采用二分查找法查找cur_pos到next_pos线段内最后一个在边界内的位置bound_pos,然后查找cur_pos到bound_pos这一段飞行轨迹中的合法落点。
如果不存在碰撞但是路点检测非法,则表明飞行结束需要回溯轨迹避障。在某些场景内有地面不存在碰撞体但存在路点的情况,此时如果检测到cur_pos.y大于cur_pos对应的路点h1,next_pos.y小于next_pos对应的路点h2,则表明虚拟角色已经陷入地面,路点检测非法。
如果存在碰撞,则从cur_pos到碰撞发生时刻人物所在位置col_pos查找合法落点。
以如图3所示的飞行轨迹为例进行说明。从D点到A点是虚拟角色在空中的飞行轨迹,在通过碰撞检测确定A点附近遇到碰撞体。此时需要从A点到D点进行回溯查找合法落点。对于A点,由于其顶部存在可行走区域,路点h大于A点的y坐标。因此需要从A点开始朝正下方射线碰撞检测,如果存在路点则判定该路点是否存在碰撞、有无移动空间。图中A点正下方是障碍物1,因此跳过A点;对于B点,由于其正下方是不可行走区域2,不存在路点,因此跳过B点;对于C点,其正下方虽然存在路点,但是由于路点对应的位置周围有障碍物3和4,虚拟角色下落后无法移动,因此跳过C点;D点正下方存在路点,路点对应的位置到D点无碰撞,且路点对应的位置周围存在移动空间,因此,可以确定该路点对应的位置是最终的合法落点。
在本发明上述实施例中,在控制虚拟角色执行飞行动作之前,该方法还包括:检测游戏场景中是否存在目标区域,其中,目标区域的尺寸大于预设尺寸,目标区域内不存在路点,且目标区域的底部与目标区域之外的其他位置的距离大于预设距离;如果检测到游戏场景内存在目标区域,基于虚拟角色的飞行参数,确定虚拟角色的飞行终点;确定飞行终点是否位于目标区域之内;如果飞行终点位于目标区域之内,则基于飞行参数,确定目标路点;控制虚拟角色执行飞行动作,并飞行至目标路点对应的位置。
上述步骤中的目标区域可以是游戏场景中一块尺寸较大、不存在路点、且区域内的底部位置比外面其他位置低很多的区域,例如,在游戏场景中,目标区域可以是一条地势很低,且宽度较大的河流。
需要说明的是,在上述游戏场景中,虚拟角色从目标区域外起跳之后,往往会在该区域内进行较长时间的无用飞行过程,如果服务器和客户端逐帧进行计算,则可能出现合法落点距离虚拟角色当前位置距离较远的情况,导致虚拟角色的表现较长,影响用户体验感。
例如,以游戏场景中存在一个地势很低的河流为例,用户控制虚拟角色从河边往河中跳,如果采用逐帧预测的方式确定虚拟角色的飞行位置,则虚拟角色跳入河内碰到河底的河床碰撞体,需要通过避障方案确定河岸的合法落点,此时,虚拟角色的最终表现是从河边起跳,跳入河内后又被拉到河岸,表现较差。
上述步骤中的预设尺寸和预设距离可以是根据实际避障需求所设定的尺寸和距离,当目标区域的尺寸大于该预设尺寸,且底部距离与其他位置的距离大于该预设距离时,可以确定虚拟角色的高空跳跃飞行可能无法飞跃该目标区域,为了避免虚拟角色的表现较差,可以在跳跃开始之前,预先确定虚拟角色是否能够飞跃过该目标区域。
上述步骤中的飞行参数可以是虚拟角色的起跳位置、起跳方向和起跳速度等,但不仅限于此。通过飞行参数,可以计算出虚拟角色在每个时刻的位置,从而确定虚拟角色的飞行轨迹,由于飞行轨迹往往是一条抛物线,因此,在确定出飞行轨迹之后,可以进一步得到虚拟角色的飞行终点,飞行终点可以是飞行轨迹中最后一个路点在y坐标以下的飞行位置。
可选的,如果检测到游戏场景内不存在目标区域,或飞行终点位于目标区域之外,则控制虚拟角色执行飞行动作。
在一种可选的实施例中,可以在虚拟角色跳跃开始之前,预先根据飞行参数计算出飞行轨迹中的飞行终点,如果确定该飞行终点位于目标区域之外,则确定虚拟角色可以飞跃过目标区域,可以控制虚拟角色正常跳跃;如果确定该飞行终点位于目标区域之内,也即,虚拟角色经过飞行终点后且下一帧位置没有路点,则判断路点检测失败,则确定虚拟角色无法飞跃过目标区域,会落入目标区域内,此时,可以直接通过避障方案确定合法落点,并控制虚拟角色开始跳跃,并降落至合法落点。
通过上述方案,本发明提供了一种带有优先方向的基于路点判定与碰撞检测的避障方案,可以使游戏在较低开销下,快速寻找到符合需求的合法落点。
在本发明上述实施例中,该方法还包括:当控制虚拟角色开始执行飞行动作时,发送第一消息至客户端,其中,客户端用于在接收到第一消息之后,控制虚拟角色开始执行飞行动作,虚拟角色显示在客户端中;当检测到第一飞行状态出现异常时,发送第二消息至客户端,其中,客户端用于当检测到虚拟角色的第二飞行状态出现异常,且接收到第二消息时,控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
上述步骤中的第一消息可以是虚拟角色跳跃开始的消息,也即,飞行开始消息;第二消息可以是飞行状态出现异常的消息,也即飞行状态更改消息。需要说明的是,为了节约客户端的计算资源,第二消息中可以携带服务器计算出合法落点。
为了解决相关技术中客户端可靠性不高,导致客户端和服务器位置不一致的问题,本发明提供了一种客户端和服务器并行检测,服务器决策的同步方案。服务器首先控制虚拟角色开始跳跃,并发送第一消息至客户端,客户端在接收到第一消息之后,控制虚拟角色开始跳跃,服务器和客户端并行进行飞行状态检测。当服务器检测到第一飞行状态出现异常时,首先寻找到合法落点,并控制虚拟角色降落至合法落点,同时可以发送第二消息至客户端。客户端同样可以检测到第二飞行状态出现异常,此时,客户端停止更新虚拟角色的位置,并在接收到第二消息之后,控制虚拟角色降落至合法落点。
需要说明的是,在网络稳定情况下,服务器发送到客户端的消息传输时间是固定的,记为Δt。同时,虚拟角色在相同位置和朝向起跳,由于场景内碰撞体、路点与边界数据在服务器和客户端中完全一致,因此,客户端与服务器的状态检测结果,以及寻找到的合法落点完全一致,因此,当客户端与服务端同时进行高空跳跃飞行的过程中位置计算、碰撞检测时,飞行状态发生改变的位置也完全一致的。同时由于稳定的网络传输延时,因此客户端看到虚拟角色碰到游戏场景中碰撞体之前的Δt时刻,服务器已经检测到了碰撞发生并计算后更改后的飞行状态并广播给所有客户端。客户端碰撞发生的时候,也是接收到第二消息的时候,因为在稳定网络环境下,客户端、服务器并行检测不会增加客户端感知的延迟。如图4所示,飞行开始消息和飞行状态更改消息的消息传输时间是相同的,因此人物在服务端和客户端的飞行时间也都是相等的。
在网络存在波动的情况下,由于客户端也在进行位置计算,因此虚拟角色的飞行仍然会正常进行。如果此时虚拟角色出现碰到游戏场景中碰撞体这种异常情况,位置更新会暂停。由于上述情况出现概率较小,因此该异常情况可以被用户接受。
通过上述步骤,通过服务器决定飞行状态的变更,可以保证所有客户端都有相同的游戏体验,保证游戏公平性,并解决了不可靠客户端问题。
在本发明上述实施例中,在控制虚拟角色开始执行飞行动作之前,同步虚拟角色的当前所处的位置和当前朝向至客户端,并基于当前所处的位置和当前朝向控制虚拟角色开始执行飞行动作,其中,客户端用于基于当前所处的位置和当前朝向控制虚拟角色开始执行飞行动作。
为了确保服务器和客户端之间飞行状态检测以及飞行过程中位置检测的结果完全相同,可以在控制虚拟角色跳跃之前,由服务器对虚拟角色的当前位置与朝向同步给客户端。服务器首先进入飞行状态,并开始进行飞行轨迹计算;客户端收到第一消息之后按照同样的轨迹计算方法计算飞行位置。
在本发明上述实施例中,服务器的第一定时器的时间间隔小于或等于客户端的第二定时器的时间间隔。
需要说明的是,上述的位置同步方案中并未考虑客户端和服务器相对时间(tick)间隔不一致的影响。
由于客户端的帧率通常在30帧以上,而服务器的tick间隔可能比客户端的tick间隔大很多。因此,为了保证服务器可以在尽量短的时间内检测到飞行状态更改,需要对服务端的轨迹计算进行适当倍频,减少tick间隔。
在本发明上述实施例中,按照预设时间间隔发送第一消息,其中,当检测到第一飞行状态出现异常时,发送当前缓存的所有第一消息。
上述步骤中的预设时间间隔可以是服务器在默认情况下发送RPC(RemoteProcedure Call,远程过程调用)消息的固定间隔。
由于服务器在默认情况下按照固定间隔发送RPC消息,这样会可能导致本帧的RPC消息要再下一帧才会开始发送,从而增加了每一帧RPC消息的传输延时。在一种可选的实施例中,在服务器检测到虚拟角色的飞行状态出现异常之后,可以将当前缓存的所有RPC立刻发送。
需要说明的是,采用上述方案可以最大程度的消除客户端和服务器的位置计算之间的误差,但是位置差异仍然不可避免。对于多段衔接的高空跳跃飞行,前一段飞行的终点是下一段飞行的起点。如果在下一段飞行开始的时候,将客户端中的虚拟角色的位置强行设置成服务器中的虚拟角色的位置,那么会导致本帧内发生较大的位置差别,加上由于动作在每一段开始的时候通常没有较大的调整,因此会容易出现肉眼可见的位置突变。本发明实施例采用了位置差异延后补偿策略,在每一段飞行开始的时候,不会将客户端中虚拟角色的位置立刻设置到服务器中虚拟角色的位置,而会在下一帧轨迹计算的时候,将两者的位置差异考虑在内,这样便可平滑的消除位置突变。
根据本发明实施例,还提供了一种虚拟角色的控制方法,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
可选的,该方法可以应用于客户端。具体地,该方法可以包括虚拟角色的避障控制方法以及位置同步方法,其中,对于虚拟角色的避障控制方法不作赘述,主要参见上述实施例中的相关描述。
图5是根据本发明实施例的另一种虚拟角色的控制方法的流程图,如图5所示,该方法包括如下步骤:
步骤S502,在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第二飞行状态是否出现异常,其中,虚拟角色显示在客户端中;
步骤S504,当检测到第二飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点;
步骤S506,控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
在本发明上述实施例中,基于虚拟角色的飞行方向确定目标路点包括:基于飞行方向,确定第二飞行状态出现异常之前,虚拟角色的第一飞行轨迹;获取位于第一飞行轨迹的预设方向上的至少一个预设路点;从至少一个预设路点中确定目标路点。
在本发明上述实施例中,在检测到虚拟角色飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体发生碰撞的情况下,基于飞行方向,确定第二飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:获取虚拟角色与碰撞体发生碰撞时所处的第一位置;基于飞行方向,确定虚拟角色飞行至第一位置的轨迹,得到第一飞行轨迹。
在本发明上述实施例中,在检测到虚拟角色飞行至下一时刻到达的位置位于游戏场景的边界之外的情况下,基于飞行方向,确定第二飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:基于飞行方向,确定虚拟角色飞行至下一时刻到达的位置的第二飞行轨迹;获取第二飞行轨迹中位于边界之内,且距离下一时刻到达的位置最近的第二位置;基于飞行方向,确定虚拟角色飞行至第二位置的轨迹,得到第一飞行轨迹。
在本发明上述实施例中,在检测到虚拟角色飞行至下一时刻到达的位置存在非法路点的情况下,基于飞行方向,确定第二飞行状态出现异常之前,虚拟角色的第一飞行轨迹包括:获取虚拟角色当前所处的位置,得到第一飞行轨迹。
在本发明上述实施例中,从至少一个预设路点中确定目标路点包括:获取从至少一个预设路点中,满足第二预设条件的目标预设路点;按照从下一时刻到达的位置至虚拟角色当前所处的位置的顺序,确定第一个目标预设路点为目标路点。
可选的,满足第二预设条件包括:在虚拟角色降落至目标预设路点对应的位置的过程中,虚拟角色与游戏场景中的其他碰撞体未发生碰撞,且,目标预设路点周围存在移动空间,其中,移动空间为允许虚拟角色移动的空间。
在本发明上述实施例中,检测虚拟角色的第二飞行状态是否出现异常包括:获取虚拟角色当前所处的当前所处的位置;基于虚拟角色的飞行参数,确定虚拟角色在下一时刻到达的下一时刻到达的位置;检测下一时刻到达的位置是否满足第一预设条件,其中,第一预设条件用于确定第二飞行状态出现异常;如果检测到下一时刻到达的位置满足第一预设条件,则确定第二飞行状态出现异常。
在本发明上述实施例中,检测下一时刻到达的位置是否满足第一预设条件包括:检测虚拟角色从当前所处的位置飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体是否发生碰撞;和/或检测下一时刻到达的位置是否位于游戏场景的边界之外;和/或检测下一时刻到达的位置是否存在非法路点;如果检测到虚拟角色与其他碰撞体发生碰撞,或,下一时刻到达的位置位于边界之外,或,下一时刻到达的位置存在非法路点,则确定下一时刻到达的位置满足第二预设条件。
在本发明上述实施例中,检测下一时刻到达的位置是否存在非法路点包括:获取当前所处的位置对应的第一路点,以及下一时刻到达的位置对应的第二路点;确定当前所处的位置的纵坐标是否大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标是否大于第二路点的纵坐标;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标大于第二路点的纵坐标,则确定下一时刻到达的位置不存在非法路点;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标小于第二路点的纵坐标,则确定下一时刻到达的位置存在非法路点。
在本发明上述实施例中,该方法还包括:当接收到服务器发送的第一消息时,控制虚拟角色开始执行飞行动作,其中,第一消息由服务器当控制虚拟角色开始执行飞行动作时发送;当检测到虚拟角色的第二飞行状态出现异常,且接收到服务器发送的第二消息时,控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置,其中,第二消息由服务器当检测到虚拟角色的第一飞行状态出现异常时发送。
在本发明上述实施例中,在检测到第二飞行状态出现异常,且未接收到第二消息的情况下,停止更新虚拟角色的位置。
在本发明上述实施例中,该方法还包括:接收服务器同步的虚拟角色的第一位置和第一朝向;获取虚拟角色的第二位置和第二朝向;基于第一位置和第二位置之间的位置偏差,以及第一朝向和第二朝向之间的朝向偏差,控制虚拟角色开始执行飞行动作。
上述步骤中的第一位置和第一朝向可以是服务器中虚拟角色所处的当前位置和当前朝向,第二位置和第二朝向可以是客户端中虚拟角色所处的当前位置和当前朝向。
需要说明的是,采用上述方案可以最大程度的消除客户端和服务器的位置计算之间的误差,但是位置差异仍然不可避免。对于多段衔接的高空跳跃飞行,前一段飞行的终点是下一段飞行的起点。如果在下一段飞行开始的时候,将客户端中的虚拟角色的位置强行设置成服务器中的虚拟角色的位置,那么会导致本帧内发生较大的位置差别,加上由于动作在每一段开始的时候通常没有较大的调整,因此会容易出现肉眼可见的位置突变。本发明实施例采用了位置差异延后补偿策略,在每一段飞行开始的时候,不会将客户端中虚拟角色的位置立刻设置到服务器中虚拟角色的位置,而会在下一帧轨迹计算的时候,将两者的位置差异考虑在内,这样便可平滑的消除位置突变。
根据本发明实施例,提供了一种虚拟角色的控制装置,该装置可以应用于服务器。该装置可以执行上述实施例中的虚拟角色的控制方法,具体实现方案与应用场景与上述实施例相同,在此不做赘述。
图6是根据本发明实施例的一种虚拟角色的控制装置的示意图,如图6所示,该装置包括:
状态检测模块62,用于在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第一飞行状态是否出现异常;
路点确定模块64,用于当检测到第一飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点;
控制模块66,用于控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
在本发明上述实施例中,路点确定模块包括:轨迹确定单元,用于基于飞行方向,确定第一飞行状态出现异常之前,虚拟角色的第一飞行轨迹;路点获取单元,用于获取位于第一飞行轨迹的预设方向上的至少一个预设路点;路点确定单元,用于从至少一个预设路点中确定目标路点。
在本发明上述实施例中,轨迹确定单元还用于在检测到虚拟角色飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体发生碰撞的情况下,获取虚拟角色与碰撞体发生碰撞时所处的第一位置,并基于飞行方向,确定虚拟角色飞行至第一位置的轨迹,得到第一飞行轨迹。
在本发明上述实施例中,轨迹确定单元还用于在检测到虚拟角色飞行至下一时刻到达的位置位于游戏场景的边界之外的情况下,基于飞行方向,确定虚拟角色飞行至下一时刻到达的位置的第二飞行轨迹,获取第二飞行轨迹中位于边界之内,且距离下一时刻到达的位置最近的第二位置,并基于飞行方向,确定虚拟角色飞行至第二位置的轨迹,得到第一飞行轨迹。
在本发明上述实施例中,轨迹确定单元还用于在检测到虚拟角色飞行至下一时刻到达的位置存在非法路点的情况下,获取虚拟角色当前所处的位置,得到第一飞行轨迹。
在本发明上述实施例中,路点确定单元还用于获取从至少一个预设路点中,满足第二预设条件的目标预设路点,并按照从下一时刻到达的位置至当前所处的位置的顺序,确定第一个目标预设路点为目标路点。
在本发明上述实施例中,状态检测模块包括:第一获取单元,用于获取虚拟角色当前所处的当前所处的位置;第一确定单元,用于基于虚拟角色的飞行参数,确定虚拟角色在下一时刻到达的下一时刻到达的位置;检测单元,用于检测下一时刻到达的位置是否满足第一预设条件,其中,第一预设条件用于确定第一飞行状态出现异常;第二确定单元,用于如果检测到下一时刻到达的位置满足第一预设条件,则确定第一飞行状态出现异常。
在本发明上述实施例中,检测单元还用于执行如下步骤:检测虚拟角色从当前所处的位置飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体是否发生碰撞;和/或检测下一时刻到达的位置是否位于游戏场景的边界之外;和/或检测下一时刻到达的位置是否存在非法路点;如果检测到虚拟角色与其他碰撞体发生碰撞,或,下一时刻到达的位置位于边界之外,或,下一时刻到达的位置存在非法路点,则确定下一时刻到达的位置满足第一预设条件。
在本发明上述实施例中,检测单元还用于执行如下步骤:获取当前所处的位置对应的第一路点,以及下一时刻到达的位置对应的第二路点;确定当前所处的位置的纵坐标是否大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标是否大于第二路点的纵坐标;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标大于第二路点的纵坐标,则确定下一时刻到达的位置不存在非法路点;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标小于第二路点的纵坐标,则确定下一时刻到达的位置存在非法路点。
在本发明上述实施例中,该装置还包括:区域检测模块,用于在控制虚拟角色执行飞行动作之前,检测游戏场景中是否存在目标区域,其中,目标区域的尺寸大于预设尺寸,目标区域内不存在路点,且目标区域的底部与目标区域之外的其他位置的距离大于预设距离;终点确定模块,用于如果检测到游戏场景内存在目标区域,基于虚拟角色的飞行参数,确定虚拟角色的飞行终点;飞行确定模块,用于确定飞行终点是否位于目标区域之内;路点确定模块还用于如果飞行终点位于目标区域之内,则基于飞行参数,确定目标路点;控制模块还用于控制虚拟角色执行飞行动作,并飞行至目标路点对应的位置。
在本发明上述实施例中,该装置还包括:消息发送模块,用于当控制虚拟角色开始执行飞行动作时,发送第一消息至客户端,其中,客户端用于在接收到第一消息之后,控制虚拟角色开始执行飞行动作,虚拟角色显示在客户端中;当检测到第一飞行状态出现异常时,发送第二消息至客户端,其中,客户端用于当检测到虚拟角色的第二飞行状态出现异常,且接收到第二消息时,控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
在本发明上述实施例中,该装置还包括:同步模块,用于在控制虚拟角色开始执行飞行动作之前,同步虚拟角色的当前所处的位置和当前朝向至客户端;控制模块还用于基于当前所处的位置和当前朝向控制虚拟角色开始执行飞行动作,其中,客户端用于基于当前所处的位置和当前朝向控制虚拟角色开始执行飞行动作。
在本发明上述实施例中,该装置还包括:消息发送模块,用于按照预设时间间隔发送第一消息,其中,当检测到第一飞行状态出现异常时,发送当前缓存的所有第一消息。
根据本发明实施例,还提供了一种虚拟角色的控制装置,该装置可以应用于客户端。该装置可以执行上述实施例中的虚拟角色的控制方法,具体实现方案与应用场景与上述实施例相同,在此不做赘述。
如图6所示,该装置包括:
状态检测模块62,用于在控制虚拟角色执行飞行动作的过程中,检测虚拟角色的第二飞行状态是否出现异常,其中,虚拟角色显示在客户端中;
路点确定模块64,用于当检测到第二飞行状态出现异常时,基于虚拟角色的飞行方向确定目标路点,其中,至少一个预设路点位于虚拟角色的预设方向上;
控制模块66,用于控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置。
在本发明上述实施例中,路点确定模块包括:轨迹确定单元,用于基于飞行方向,确定第二飞行状态出现异常之前,虚拟角色的第一飞行轨迹;路点获取单元,用于获取位于第一飞行轨迹的预设方向上的至少一个预设路点;路点确定单元,用于从至少一个预设路点中确定目标路点。
在本发明上述实施例中,轨迹确定单元还用于在检测到虚拟角色飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体发生碰撞的情况下,获取虚拟角色与碰撞体发生碰撞时所处的第一位置,并基于飞行方向,确定虚拟角色飞行至第一位置的轨迹,得到第一飞行轨迹。
在本发明上述实施例中,轨迹确定单元还用于在检测到虚拟角色飞行至下一时刻到达的位置位于游戏场景的边界之外的情况下,基于飞行方向,确定虚拟角色飞行至下一时刻到达的位置的第二飞行轨迹,获取第二飞行轨迹中位于边界之内,且距离下一时刻到达的位置最近的第二位置,并基于飞行方向,确定虚拟角色飞行至第二位置的轨迹,得到第一飞行轨迹。
在本发明上述实施例中,轨迹确定单元还用于在检测到虚拟角色飞行至下一时刻到达的位置存在非法路点的情况下,获取虚拟角色当前所处的位置,得到第一飞行轨迹。
在本发明上述实施例中,路点确定单元还用于获取从至少一个预设路点中,满足第二预设条件的目标预设路点,并按照从下一时刻到达的位置至当前所处的位置的顺序,确定第一个目标预设路点为目标路点。
在本发明上述实施例中,状态检测模块包括:第一获取单元,用于获取虚拟角色当前所处的当前所处的位置;第一确定单元,用于基于虚拟角色的飞行参数,确定虚拟角色在下一时刻到达的下一时刻到达的位置;检测单元,用于检测下一时刻到达的位置是否满足第一预设条件,其中,第一预设条件用于确定第二飞行状态出现异常;第二确定单元,用于如果检测到下一时刻到达的位置满足第一预设条件,则确定第二飞行状态出现异常。
在本发明上述实施例中,检测单元还用于执行如下步骤:检测虚拟角色从当前所处的位置飞行至下一时刻到达的位置的过程中,虚拟角色与游戏场景内的其他碰撞体是否发生碰撞;和/或检测下一时刻到达的位置是否位于游戏场景的边界之外;和/或检测下一时刻到达的位置是否存在非法路点;如果检测到虚拟角色与其他碰撞体发生碰撞,或,下一时刻到达的位置位于边界之外,或,下一时刻到达的位置存在非法路点,则确定下一时刻到达的位置满足第一预设条件。
在本发明上述实施例中,检测单元还用于执行如下步骤:获取当前所处的位置对应的第一路点,以及下一时刻到达的位置对应的第二路点;确定当前所处的位置的纵坐标是否大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标是否大于第二路点的纵坐标;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标大于第二路点的纵坐标,则确定下一时刻到达的位置不存在非法路点;如果当前所处的位置的纵坐标大于第一路点的纵坐标,且下一时刻到达的位置的纵坐标小于第二路点的纵坐标,则确定下一时刻到达的位置存在非法路点。
在本发明上述实施例中,控制模块还用于当消息发送模块接收到服务器发送的第一消息时,控制虚拟角色开始执行飞行动作,其中,第一消息由服务器当控制虚拟角色开始执行飞行动作时发送;当检测到虚拟角色的第二飞行状态出现异常,且消息发送模块接收到服务器发送的第二消息时,控制虚拟角色停止执行飞行动作,并降落至目标路点对应的位置,其中,第二消息由服务器当检测到虚拟角色的第一飞行状态出现异常时发送。
在本发明上述实施例中,控制模块还用于在检测到第二飞行状态出现异常,且未接收到第二消息的情况下,停止更新虚拟角色的位置。
在本发明上述实施例中,该装置还包括:消息发送模块,用于接收服务器同步的虚拟角色的第一位置和第一朝向;参数获取模块,用于获取虚拟角色的第二位置和第二朝向;控制模块还用于基于第一位置和第二位置之间的位置偏差,以及第一朝向和第二朝向之间的朝向偏差,控制虚拟角色开始执行飞行动作。
根据本发明实施例,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,在程序运行时控制计算机可读存储介质所在设备执行上述的虚拟角色的控制方法。
根据本发明实施例,还提供了一种处理器,处理器用于运行程序,其中,程序运行时执行上述的虚拟角色的控制方法。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (25)
1.一种虚拟角色的控制方法,其特征在于,应用于服务器,所述方法包括:
在控制虚拟角色执行飞行动作的过程中,检测所述虚拟角色的第一飞行状态是否出现异常;
当检测到所述第一飞行状态出现异常时,基于所述虚拟角色的飞行方向确定目标路点;
控制所述虚拟角色停止执行所述飞行动作,并降落至所述目标路点对应的位置。
2.根据权利要求1所述的方法,其特征在于,基于所述虚拟角色的飞行方向确定所述目标路点包括:
基于所述飞行方向,确定所述第一飞行状态出现异常之前,所述虚拟角色的第一飞行轨迹;
获取位于所述第一飞行轨迹的预设方向上的至少一个预设路点;
从所述至少一个预设路点中确定所述目标路点。
3.根据权利要求2所述的方法,其特征在于,在检测到所述虚拟角色飞行至下一时刻到达的位置的过程中,所述虚拟角色与游戏场景内的其他碰撞体发生碰撞的情况下,基于所述飞行方向,确定所述第一飞行状态出现异常之前,所述虚拟角色的第一飞行轨迹包括:
获取所述虚拟角色与所述碰撞体发生碰撞时所处的第一位置;
基于所述飞行方向,确定所述虚拟角色飞行至所述第一位置的轨迹,得到所述第一飞行轨迹。
4.根据权利要求2所述的方法,其特征在于,在检测到所述虚拟角色飞行至下一时刻到达的位置位于游戏场景的边界之外的情况下,基于所述飞行方向,确定所述第一飞行状态出现异常之前,所述虚拟角色的第一飞行轨迹包括:
基于所述飞行方向,确定所述虚拟角色飞行至所述下一时刻到达的位置的第二飞行轨迹;
获取所述第二飞行轨迹中位于所述边界之内,且距离所述下一时刻到达的位置最近的第二位置;
基于所述飞行方向,确定所述虚拟角色飞行至所述第二位置的轨迹,得到所述第一飞行轨迹。
5.根据权利要求2所述的方法,其特征在于,在检测到所述虚拟角色飞行至下一时刻到达的位置存在非法路点的情况下,基于所述飞行方向,确定所述第一飞行状态出现异常之前,所述虚拟角色的第一飞行轨迹包括:
获取所述虚拟角色当前所处的位置,得到所述第一飞行轨迹。
6.根据权利要求2至5中任意一项所述的方法,其特征在于,从所述至少一个预设路点中确定所述目标路点包括:
获取从所述至少一个预设路点中,满足第二预设条件的目标预设路点;
按照从下一时刻到达的位置至所述虚拟角色当前所处的位置的顺序,确定第一个目标预设路点为所述目标路点。
7.根据权利要求6所述的方法,其特征在于,满足所述第二预设条件包括:在所述虚拟角色降落至所述目标预设路点对应的位置的过程中,所述虚拟角色与游戏场景中的其他碰撞体未发生碰撞,且,所述目标预设路点周围存在移动空间,其中,所述移动空间为允许所述虚拟角色移动的空间。
8.根据权利要求1所述的方法,其特征在于,检测所述虚拟角色的第一飞行状态是否出现异常包括:
获取所述虚拟角色当前所处的位置;
基于所述虚拟角色的飞行参数,确定所述虚拟角色在下一时刻到达的位置;
检测所述下一时刻到达的位置是否满足第一预设条件,其中,所述第一预设条件用于确定所述第一飞行状态出现异常;
如果检测到所述下一时刻到达的位置满足所述第一预设条件,则确定所述第一飞行状态出现异常。
9.根据权利要求8所述的方法,其特征在于,检测所述下一时刻到达的位置是否满足第一预设条件包括:
检测所述虚拟角色从所述当前所处的位置飞行至所述下一时刻到达的位置的过程中,所述虚拟角色与游戏场景内的其他碰撞体是否发生碰撞;和/或
检测所述下一时刻到达的位置是否位于所述游戏场景的边界之外;和/或
检测所述下一时刻到达的位置是否存在非法路点;
如果检测到所述虚拟角色与所述其他碰撞体发生碰撞,或,所述下一时刻到达的位置位于所述边界之外,或,所述下一时刻到达的位置存在所述非法路点,则确定所述下一时刻到达的位置满足所述第一预设条件。
10.根据权利要求9所述的方法,其特征在于,检测所述下一时刻到达的位置是否存在非法路点包括:
获取所述当前所处的位置对应的第一路点,以及所述下一时刻到达的位置对应的第二路点;
确定所述当前所处的位置的纵坐标是否大于所述第一路点的纵坐标,且所述下一时刻到达的位置的纵坐标是否大于所述第二路点的纵坐标;
如果所述当前所处的位置的纵坐标大于所述第一路点的纵坐标,且所述下一时刻到达的位置的纵坐标大于所述第二路点的纵坐标,则确定所述下一时刻到达的位置不存在所述非法路点;
如果所述当前所处的位置的纵坐标大于所述第一路点的纵坐标,且所述下一时刻到达的位置的纵坐标小于所述第二路点的纵坐标,则确定所述下一时刻到达的位置存在所述非法路点。
11.根据权利要求1所述的方法,其特征在于,在控制所述虚拟角色执行飞行动作之前,所述方法还包括:
检测游戏场景中是否存在目标区域,其中,所述目标区域的尺寸大于预设尺寸,所述目标区域内不存在路点,且所述目标区域的底部与所述目标区域之外的其他位置的距离大于预设距离;
如果检测到所述游戏场景内存在所述目标区域,基于所述虚拟角色的飞行参数,确定所述虚拟角色的飞行终点;
确定所述飞行终点是否位于所述目标区域之内;
如果所述飞行终点位于所述目标区域之内,则基于所述飞行参数,确定所述目标路点;
控制所述虚拟角色执行所述飞行动作,并飞行至所述目标路点对应的位置。
12.根据权利要求11所述的方法,其特征在于,如果检测到所述游戏场景内不存在所述目标区域,或所述飞行终点位于所述目标区域之外,则控制所述虚拟角色执行所述飞行动作。
13.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当控制所述虚拟角色开始执行所述飞行动作时,发送第一消息至客户端,其中,所述客户端用于在接收到所述第一消息之后,控制虚拟角色开始执行所述飞行动作,所述虚拟角色显示在所述客户端中;
当检测到所述第一飞行状态出现异常时,发送第二消息至所述客户端,其中,所述客户端用于当检测到所述虚拟角色的第二飞行状态出现异常,且接收到所述第二消息时,控制所述虚拟角色停止执行所述飞行动作,并降落至所述目标路点对应的位置。
14.根据权利要求13所述的方法,其特征在于,在控制所述虚拟角色开始执行所述飞行动作之前,同步所述虚拟角色的当前所处的位置和当前朝向至所述客户端,并基于所述当前所处的位置和所述当前朝向控制所述虚拟角色开始执行所述飞行动作,其中,所述客户端用于基于所述当前所处的位置和所述当前朝向控制所述虚拟角色开始执行所述飞行动作。
15.根据权利要求13所述的方法,其特征在于,所述服务器的第一定时器的时间间隔小于或等于所述客户端的第二定时器的时间间隔。
16.根据权利要求13所述的方法,其特征在于,按照预设时间间隔发送所述第一消息,其中,当检测到所述第一飞行状态出现异常时,发送当前缓存的所有第一消息。
17.一种虚拟角色的控制方法,其特征在于,应用于客户端,所述方法包括:
在控制虚拟角色执行飞行动作的过程中,检测所述虚拟角色的第二飞行状态是否出现异常,其中,所述虚拟角色显示在所述客户端中;
当检测到所述第二飞行状态出现异常时,基于所述虚拟角色的飞行方向确定目标路点;
控制所述虚拟角色停止执行所述飞行动作,并降落至所述目标路点对应的位置。
18.根据权利要求17所述的方法,其特征在于,基于所述虚拟角色的飞行方向确定所述目标路点包括:
基于所述飞行方向,确定所述第二飞行状态出现异常之前,所述虚拟角色的第一飞行轨迹;
获取位于所述第一飞行轨迹的预设方向上的至少一个预设路点;
从所述至少一个预设路点中确定所述目标路点。
19.根据权利要求17所述的方法,其特征在于,所述方法还包括:
当接收到服务器发送的第一消息时,控制所述虚拟角色开始执行所述飞行动作,其中,所述第一消息由所述服务器当控制虚拟角色开始执行所述飞行动作时发送;
当检测到所述第二飞行状态出现异常,且接收到所述服务器发送的第二消息时,控制所述虚拟角色停止执行所述飞行动作,并降落至所述目标路点对应的位置,其中,所述第二消息由所述服务器当检测到所述虚拟角色的第一飞行状态出现异常时发送。
20.根据权利要求19所述的方法,其特征在于,在检测到所述第二飞行状态出现异常,且未接收到所述第二消息的情况下,停止更新所述虚拟角色的位置。
21.根据权利要求19所述的方法,其特征在于,所述方法还包括:
接收所述服务器同步的所述虚拟角色的第一位置和第一朝向;
获取所述虚拟角色的第二位置和第二朝向;
基于所述第一位置和所述第二位置之间的位置偏差,以及所述第一朝向和所述第二朝向之间的朝向偏差,控制所述虚拟角色开始执行所述飞行动作。
22.一种虚拟角色的控制装置,其特征在于,应用于服务器,所述装置包括:
状态检测模块,用于在控制虚拟角色执行飞行动作的过程中,检测所述虚拟角色的第一飞行状态是否出现异常;
路点确定模块,用于当检测到所述第一飞行状态出现异常时,基于所述虚拟角色的飞行方向确定目标路点;
控制模块,用于控制所述虚拟角色停止执行所述飞行动作,并降落至所述目标路点对应的位置。
23.一种虚拟角色的控制装置,其特征在于,应用于客户端,所述装置包括:
状态检测模块,用于在控制虚拟角色执行飞行动作的过程中,检测所述虚拟角色的第二飞行状态是否出现异常,其中,所述虚拟角色显示在所述客户端中;
路点确定模块,用于当检测到所述第二飞行状态出现异常时,基于所述虚拟角色的飞行方向确定目标路点;
控制模块,用于控制所述虚拟角色停止执行所述飞行动作,并降落至所述目标路点对应的位置。
24.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的程序,其中,在所述程序运行时控制所述计算机可读存储介质所在设备执行权利要求1至21中任意一项所述的虚拟角色的控制方法。
25.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至21中任意一项所述的虚拟角色的控制方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011287359.3A CN112370787B (zh) | 2020-11-17 | 2020-11-17 | 虚拟角色的控制方法、计算机可读存储介质及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011287359.3A CN112370787B (zh) | 2020-11-17 | 2020-11-17 | 虚拟角色的控制方法、计算机可读存储介质及处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112370787A true CN112370787A (zh) | 2021-02-19 |
CN112370787B CN112370787B (zh) | 2024-07-19 |
Family
ID=74585868
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011287359.3A Active CN112370787B (zh) | 2020-11-17 | 2020-11-17 | 虚拟角色的控制方法、计算机可读存储介质及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112370787B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113546423A (zh) * | 2021-07-22 | 2021-10-26 | 网易(杭州)网络有限公司 | 一种动作生成方法、装置、计算机设备和存储介质 |
CN113769406A (zh) * | 2021-09-18 | 2021-12-10 | 北京冰封互娱科技有限公司 | 虚拟角色的控制方法及装置、存储介质、电子装置 |
CN114879747A (zh) * | 2022-07-06 | 2022-08-09 | 成都行远捷科技有限公司 | 一种基于具体限定条件下的落位点寻址方法 |
CN116688493A (zh) * | 2023-07-31 | 2023-09-05 | 厦门真有趣信息科技有限公司 | 一种足球类游戏的交互控制方法 |
WO2024193218A1 (zh) * | 2023-03-22 | 2024-09-26 | 腾讯科技(深圳)有限公司 | 虚拟对象的互动控制方法、装置、设备、介质及产品 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108176050A (zh) * | 2017-12-07 | 2018-06-19 | 北京像素软件科技股份有限公司 | 寻路方法和装置 |
WO2019196568A1 (zh) * | 2018-04-10 | 2019-10-17 | 网易(杭州)网络有限公司 | 一种游戏角色的控制方法及装置、电子设备和可读介质 |
CN110507994A (zh) * | 2019-09-05 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 控制虚拟飞行器飞行的方法、装置、设备及存储介质 |
CN110568862A (zh) * | 2019-09-29 | 2019-12-13 | 苏州浪潮智能科技有限公司 | 一种无人机飞行路径规划方法、装置及相关设备 |
CN110812844A (zh) * | 2019-11-06 | 2020-02-21 | 网易(杭州)网络有限公司 | 一种游戏中的寻路方法、终端及可读存储介质 |
-
2020
- 2020-11-17 CN CN202011287359.3A patent/CN112370787B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108176050A (zh) * | 2017-12-07 | 2018-06-19 | 北京像素软件科技股份有限公司 | 寻路方法和装置 |
WO2019196568A1 (zh) * | 2018-04-10 | 2019-10-17 | 网易(杭州)网络有限公司 | 一种游戏角色的控制方法及装置、电子设备和可读介质 |
CN110507994A (zh) * | 2019-09-05 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 控制虚拟飞行器飞行的方法、装置、设备及存储介质 |
CN110568862A (zh) * | 2019-09-29 | 2019-12-13 | 苏州浪潮智能科技有限公司 | 一种无人机飞行路径规划方法、装置及相关设备 |
CN110812844A (zh) * | 2019-11-06 | 2020-02-21 | 网易(杭州)网络有限公司 | 一种游戏中的寻路方法、终端及可读存储介质 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113546423A (zh) * | 2021-07-22 | 2021-10-26 | 网易(杭州)网络有限公司 | 一种动作生成方法、装置、计算机设备和存储介质 |
CN113546423B (zh) * | 2021-07-22 | 2024-04-30 | 网易(杭州)网络有限公司 | 一种动作生成方法、装置、计算机设备和存储介质 |
CN113769406A (zh) * | 2021-09-18 | 2021-12-10 | 北京冰封互娱科技有限公司 | 虚拟角色的控制方法及装置、存储介质、电子装置 |
CN113769406B (zh) * | 2021-09-18 | 2024-07-02 | 北京冰封互娱科技有限公司 | 虚拟角色的控制方法及装置、存储介质、电子装置 |
CN114879747A (zh) * | 2022-07-06 | 2022-08-09 | 成都行远捷科技有限公司 | 一种基于具体限定条件下的落位点寻址方法 |
CN114879747B (zh) * | 2022-07-06 | 2022-09-06 | 成都行远捷科技有限公司 | 一种基于具体限定条件下的落位点寻址方法 |
WO2024193218A1 (zh) * | 2023-03-22 | 2024-09-26 | 腾讯科技(深圳)有限公司 | 虚拟对象的互动控制方法、装置、设备、介质及产品 |
CN116688493A (zh) * | 2023-07-31 | 2023-09-05 | 厦门真有趣信息科技有限公司 | 一种足球类游戏的交互控制方法 |
CN116688493B (zh) * | 2023-07-31 | 2023-10-24 | 厦门真有趣信息科技有限公司 | 一种足球类游戏的交互控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112370787B (zh) | 2024-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112370787A (zh) | 虚拟角色的控制方法、计算机可读存储介质及处理器 | |
CN112327914B (zh) | 一种高层消防多无人机室内协同路径规划方法及系统 | |
KR102647820B1 (ko) | 액션 실행 방법 및 장치, 저장 매체 및 전자 장치 | |
TWI664836B (zh) | 控制模擬對象尋路的方法、裝置及伺服器 | |
JP7064607B2 (ja) | 情報処理方法、装置、移動端末と記憶媒体 | |
WO2019127019A9 (zh) | 无人飞行器路径规划方法、装置和飞行管理方法、装置 | |
US20210362042A1 (en) | In-Game Display Control Method and Apparatus, Storage Medium, Processor, and Terminal | |
CN110755848B (zh) | 一种游戏中的寻路方法、终端及可读存储介质 | |
CN109224438B (zh) | 游戏中虚拟角色的控制方法及装置 | |
CN106802665B (zh) | 一种无人机机群系统 | |
CN114815863A (zh) | 无人机的控制方法、设备及障碍物的提示方法、设备 | |
WO2019022841A1 (en) | CONTROLLING ENTITY BEHAVIOR IN FUNNEL SECTIONS OF COMPUTER REPRESENTED ENVIRONMENT | |
CN114510069A (zh) | 飞行控制方法、设备、无人机及计算机可读存储介质 | |
CN109901617A (zh) | 一种无人机飞行方法、装置及无人机 | |
WO2022095060A1 (zh) | 路径规划方法、路径规划装置、路径规划系统和介质 | |
US20230415046A1 (en) | Information synchronization method and apparatus, and storage medium | |
US11633671B2 (en) | Method and apparatus for dynamic management of formations in a video game | |
CN110709792A (zh) | 移动平台的辅助移动方法、移动装置及移动平台 | |
CN110772784B (zh) | 载具控制方法和装置、存储介质及电子装置 | |
CN117899482A (zh) | 游戏的寻路控制方法、装置、处理设备及存储介质 | |
CN113680055A (zh) | 虚拟对象的控制方法、电子设备及可读介质 | |
CN112619140A (zh) | 游戏中位置的确定方法、装置及路径的调整方法、装置 | |
US20190317529A1 (en) | Virtual force system for a drone | |
US11241621B2 (en) | Non-transitory computer-readable medium and video game processing system | |
US20180280804A1 (en) | Program and system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |