CN111346379B - 一种实现碰撞处理的方法及装置 - Google Patents
一种实现碰撞处理的方法及装置 Download PDFInfo
- Publication number
- CN111346379B CN111346379B CN202010170415.9A CN202010170415A CN111346379B CN 111346379 B CN111346379 B CN 111346379B CN 202010170415 A CN202010170415 A CN 202010170415A CN 111346379 B CN111346379 B CN 111346379B
- Authority
- CN
- China
- Prior art keywords
- collision
- collision body
- target object
- movement
- distance
- 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.)
- Active
Links
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/50—Controlling the output signals based on the game progress
- A63F13/52—Controlling the output signals based on the game progress involving aspects of the displayed game scene
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02A—TECHNOLOGIES FOR ADAPTATION TO CLIMATE CHANGE
- Y02A30/00—Adapting or protecting infrastructure or their operation
- Y02A30/30—Adapting or protecting infrastructure or their operation in transportation, e.g. on roads, waterways or railways
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Human Computer Interaction (AREA)
- Image Analysis (AREA)
- Control Of Position, Course, Altitude, Or Attitude Of Moving Bodies (AREA)
Abstract
本申请实施例公开了一种实现碰撞处理的方法及装置,本申请实施例提供的实现碰撞处理的方法通过对目标对象和碰撞体的位置的获取和判断,将发生碰撞的碰撞体先进行位置的重定位,并根据原始移动方向和原始移动速度确定碰撞后的移动方向和移动速度,控制碰撞体按照碰撞后的移动方向和移动速度运动。由此可见,本申请实施例提供的方法根据碰撞体原始移动方向和原始移动速度确定碰撞后的移动方向和移动速度,可以在检测到碰撞后对碰撞体的移动进行正确的调整,提高碰撞体在碰撞后的运动的准确性。
Description
技术领域
本申请涉及互联网技术领域,具体涉及一种实现碰撞处理的方法及装置。
背景技术
随着互联网技术的快速发展,越来越多的应用程序在生活中得到使用,部分应用程序在使用的过程中具有需要移动的对象,用户可以移动需要移动的对象实现下一步的操作。在用户移动对象的过程中,可能会具有障碍物阻挡,此时用户所移动的对象会与障碍物发生碰撞,移动的对象就成为碰撞体,碰撞体的运动应当受到碰撞的影响。但是,在部分应用程序中,碰撞体在碰撞之后不能正确的进行移动方向的调整,导致碰撞体的移动具有偏差。
发明内容
有鉴于此,本申请实施例提供一种实现碰撞处理的方法及装置,能够对碰撞体在碰撞后的移动方向进行正确的调整。
为解决上述问题,本申请实施例提供的技术方案如下:
第一方面,本申请提供一种实现碰撞处理的方法,所述方法包括:
获取目标对象的位置以及碰撞体的位置,所述目标对象为轴对齐四边形,所述碰撞体为轴对齐四边形或者圆形;
根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞;
如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离;
根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度;
按照所述碰撞体的碰撞后移动方向与碰撞后移动速度,控制所述碰撞体运动。
可选的,所述方法还包括:
如果所述目标对象与所述碰撞体不存在碰撞,根据本次获取的所述碰撞体的位置与上一次获取的所述碰撞体的位置,确定所述碰撞体的移动范围;
根据所述目标对象的位置,判断所述碰撞体的移动范围是否与所述目标对象存在重叠;
如果不存在重叠,按照所述碰撞体的原始移动方向与原始移动速度,控制所述碰撞体运动;
如果存在重叠,控制所述碰撞体向所述碰撞体的原始移动方向的反方向运动,直到所述目标对象与所述碰撞体存在碰撞,执行所述如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离以及后续步骤。
可选的,当所述目标对象与所述碰撞体均为轴对齐四边形,所述根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞,包括:
根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体的横坐标范围是否存在重叠,所述目标对象与所述碰撞体的纵坐标范围是否存在重叠;
如果所述目标对象与所述碰撞体的横坐标范围、所述目标对象与所述碰撞体的纵坐标范围均存在重叠,确定所述目标对象与所述碰撞体存在碰撞;
如果所述目标对象与所述碰撞体的横坐标范围、所述目标对象与所述碰撞体的纵坐标范围不均存在重叠,确定所述目标对象与所述碰撞体不存在碰撞。
可选的,当所述目标对象为轴对齐四边形,所述碰撞体为圆形,所述根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞,包括:
根据所述目标对象的位置以及所述碰撞体的位置,计算所述目标对象的边上与所述碰撞体的圆心距离最近的目标点的坐标;
计算所述目标点与所述碰撞体的圆心之间的距离,得到第二距离;
如果所述第二距离小于或等于所述碰撞体的半径,确定所述目标对象与所述碰撞体存在碰撞;
如果所述第二距离大于所述碰撞体的半径,确定所述目标对象与所述碰撞体不存在碰撞。
可选的,所述如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离,包括:
如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体的半径与所述第二距离的差值,得到所述碰撞体侵入所述目标对象的第一距离;
将所述碰撞体的圆心与所述目标点之间的方向矢量分别与标准方向的矢量进行点乘,将满足预设条件的点乘结果对应的标准方向确定为侵入方向;
控制所述碰撞体向所述侵入方向的反方向移动所述第一距离。
可选的,所述根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度,包括:
将所述碰撞体的原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量相乘,得到第一结果,如果所述第一结果小于零,将所述碰撞体的原始移动方向矢量的横坐标轴分量置零;所述第一方向矢量为所述碰撞体的碰撞点与中心点之间的方向矢量;所述碰撞点为在控制所述碰撞体向所述侵入方向的反方向移动所述第一距离之后,在所述目标对象的边上与所述碰撞体的中心点距离最近的点;
将所述碰撞体的原始移动方向矢量的纵坐标轴分量与所述第一方向矢量的纵坐标分量相乘,得到第二结果,如果所述第二结果小于零,将所述碰撞体的原始移动方向矢量的纵坐标轴分量置零;
根据变更后的原始移动方向矢量确定所述碰撞体的碰撞后移动方向;
将所述碰撞体的原始移动速度确定为所述碰撞体的碰撞后移动速度。
可选的,所述根据变更后的原始移动方向矢量确定所述碰撞体的碰撞后移动方向,包括:
如果变更后的原始移动方向矢量的横坐标轴分量与纵坐标轴分量均置零,且当仅存在一个碰撞点时,将所述第一方向矢量的垂直方向确定为所述碰撞体的碰撞后移动方向。
可选的,所述根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度,包括:
将所述碰撞体的原始移动方向的反方向确定为所述碰撞体的碰撞后移动方向;
将所述碰撞体的原始移动速度确定为所述碰撞体的碰撞后移动速度。
第二方面,本申请提供一种实现碰撞处理的装置,所述装置包括:
获取单元,用于获取目标对象的位置以及碰撞体的位置,所述目标对象为轴对齐四边形,所述碰撞体为轴对齐四边形或者圆形;
判断单元,用于根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞;
重定位单元,用于如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离;
碰撞运动计算单元,用于根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度;
碰撞运动控制单元,用于按照所述碰撞体的碰撞后移动方向与碰撞后移动速度,控制所述碰撞体运动。
可选的,所述装置还包括:
移动范围确定单元,用于如果所述目标对象与所述碰撞体不存在碰撞,根据本次获取的所述碰撞体的位置与上一次获取的所述碰撞体的位置,确定所述碰撞体的移动范围;
重叠判断单元,用于根据所述目标对象的位置,判断所述碰撞体的移动范围是否与所述目标对象存在重叠;
运动控制单元,用于如果不存在重叠,按照所述碰撞体的原始移动方向与原始移动速度,控制所述碰撞体运动;
移动单元,用于如果存在重叠,控制所述碰撞体向所述碰撞体的原始移动方向的反方向运动,直到所述目标对象与所述碰撞体存在碰撞。
可选的,当所述目标对象与所述碰撞体均为轴对齐四边形,所述判断单元包括:
坐标判断子单元,用于根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体的横坐标范围是否存在重叠,所述目标对象与所述碰撞体的纵坐标范围是否存在重叠;
第一碰撞确定子单元,用于如果所述目标对象与所述碰撞体的横坐标范围、所述目标对象与所述碰撞体的纵坐标范围均存在重叠,确定所述目标对象与所述碰撞体存在碰撞;如果所述目标对象与所述碰撞体的横坐标范围、所述目标对象与所述碰撞体的纵坐标范围不均存在重叠,确定所述目标对象与所述碰撞体不存在碰撞。
可选的,当所述目标对象为轴对齐四边形,所述碰撞体为圆形,所述判断单元包括:
第二距离计算子单元,用于根据所述目标对象的位置以及所述碰撞体的位置,计算所述目标对象的边上与所述碰撞体的圆心距离最近的目标点的坐标;计算所述目标点与所述碰撞体的圆心之间的距离,得到第二距离;
第二碰撞确定子单元,用于如果所述第二距离小于或等于所述碰撞体的半径,确定所述目标对象与所述碰撞体存在碰撞;如果所述第二距离大于所述碰撞体的半径,确定所述目标对象与所述碰撞体不存在碰撞。
可选的,所述重定位单元包括:
第一距离计算子单元,用于如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体的半径与所述第二距离的差值,得到所述碰撞体侵入所述目标对象的第一距离;
侵入方向确定子单元,用于将所述碰撞体的圆心与所述目标点之间的方向矢量分别与标准方向的矢量进行点乘,将满足预设条件的点乘结果对应的标准方向确定为侵入方向;
重定位移动子单元,用于控制所述碰撞体向所述侵入方向的反方向移动所述第一距离。
可选的,所述碰撞运动计算单元包括:
横坐标计算子单元,用于将所述碰撞体的原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量相乘,得到第一结果,如果所述第一结果小于零,将所述碰撞体的原始移动方向矢量的横坐标轴分量置零;所述第一方向矢量为所述碰撞体的碰撞点与中心点之间的方向矢量;所述碰撞点为在控制所述碰撞体向所述侵入方向的反方向移动所述第一距离之后,在所述目标对象的边上与所述碰撞体的中心点距离最近的点;
纵坐标计算子单元,用于将所述碰撞体的原始移动方向矢量的纵坐标轴分量与所述第一方向矢量的纵坐标分量相乘,得到第二结果,如果所述第二结果小于零,将所述碰撞体的原始移动方向矢量的纵坐标轴分量置零;
方向确定子单元,用于根据变更后的原始移动方向矢量确定所述碰撞体的碰撞后移动方向;
速度确定子单元,用于将所述碰撞体的原始移动速度确定为所述碰撞体的碰撞后移动速度。
可选的,所述方向确定子单元还用于如果变更后的原始移动方向矢量的横坐标轴分量与纵坐标轴分量均置零,且当仅存在一个碰撞点时,将所述第一方向矢量的垂直方向确定为所述碰撞体的碰撞后移动方向。
可选的,所述碰撞运动计算单元包括:
反弹运动计算单元,用于将所述碰撞体的原始移动方向的反方向确定为所述碰撞体的碰撞后移动方向;将所述碰撞体的原始移动速度确定为所述碰撞体的碰撞后移动速度。
由此可见,本申请实施例具有如下有益效果:
本申请实施例提供的实现碰撞处理的方法通过对目标对象和碰撞体的位置的获取和判断,将发生碰撞的碰撞体先进行位置的重定位,并根据原始移动方向和原始移动速度确定碰撞后的移动方向和移动速度,控制碰撞体按照碰撞后的移动方向和移动速度运动。由此可见,本申请实施例提供的方法根据碰撞体原始移动方向和原始移动速度确定碰撞后的移动方向和移动速度,可以在检测到碰撞后对碰撞体的移动进行正确的调整,提高了碰撞体在碰撞后的移动的准确性。可以解决现有技术中,由于不对碰撞进行检测或者是碰撞后没有参考碰撞体碰撞前的运动而导致的碰撞体在碰撞后的运动的不准确或者是具有偏差的问题。
附图说明
图1为本申请实施例提供的一种实现碰撞处理的方法的流程图;
图2为本申请实施例提供的另一种实现碰撞处理的方法的流程图;
图3为本申请实施例提供的一种碰撞场景的示意图;
图4为本申请实施例提供的另一种碰撞场景的示意图;
图5为本申请实施例提供的另一种碰撞场景的示意图;
图6为本申请实施例提供的另一种碰撞场景的示意图;
图7为本申请实施例提供的另一种实现碰撞处理的方法的流程图;
图8为本申请实施例提供的另一种碰撞场景的示意图;
图9为本申请实施例提供的另一种实现碰撞处理的方法的流程图;
图10为本申请实施例提供的另一种实现碰撞处理的方法的流程图;
图11为本申请实施例提供的另一种碰撞场景的示意图;
图12为本申请实施例提供的另一种实现碰撞处理的方法的流程图;
图13为本申请实施例提供的另一种实现碰撞处理的方法的流程图;
图14为本申请实施例提供的一种实现碰撞处理的装置的结构示意图。
具体实施方式
为了便于理解和解释本申请实施例提供的技术方案,下面将先对本申请的背景技术进行说明。
发明人在对现有的部分应用程序中的对象的移动过程经过研究后发现,用户在移动某个对象时,可能会在移动的过程中会和移动方向上的障碍物发生碰撞,此时移动的对象就是碰撞体,碰撞体在发生碰撞后,其移动的方向应当受到碰撞的影响,改变原有的移动的方向。但是,现有的部分可以移动的对象在移动的过程中可能会在碰撞后按照不正确的移动方向进行移动,例如,穿透障碍物,或者是停止移动等。这是由于缺乏对于碰撞的检测或者是不能根据碰撞前碰撞体运动的方向和速度进行碰撞后的调整。这导致用户在移动对象时,碰撞体在碰撞后会出现移动方向的偏差,对用户的判断造成影响,带来不好的用户体验。例如,在常见的游戏的场景中,用户在释放技能或者是进行操作时,当移动的技能或者是移动操作遇到障碍物时,按照真实物体的移动规则应当改变移动的方向,可以进行反弹移动或者是沿着障碍物进行移动等,但是部分游戏中的技能或者是操作会不改变原有的移动方向或者是不准确的改变移动方向。这会导致用户对于技能或者是操作原有的判断失效,影响用户的后续的操作。
基于此,本申请实施例提供一种实现碰撞处理的方法,该方法包括:获取目标对象的位置以及碰撞体的位置,目标对象为轴对齐四边形,碰撞体为轴对齐四边形或者圆形;根据目标对象的位置以及碰撞体的位置,判断目标对象与碰撞体是否存在碰撞;如果目标对象与碰撞体存在碰撞,计算碰撞体侵入目标对象的第一距离以及侵入方向,控制碰撞体向侵入方向的反方向移动第一距离;根据碰撞体的原始移动方向以及碰撞体的原始移动速度,确定碰撞体的碰撞后移动方向与碰撞后移动速度;按照碰撞体的碰撞后移动方向与碰撞后移动速度,控制碰撞体运动。由此,可以通过对目标对象和碰撞体的位置来判断是否存在碰撞,当存在碰撞时,根据碰撞体的侵入方向、第一距离、原始移动方向和原始移动速度,确定碰撞体的碰撞后移动方向与碰撞后移动速度,控制碰撞体运动,从而可以实现碰撞体在碰撞之后的移动方向的准确性。
为了便于理解本申请实施例提供的技术方案,下面结合附图对本申请实施例提供的一种实现碰撞处理的方法进行说明。
参见图1,该图为本申请实施例提供的一种实现碰撞处理的方法的流程图,该方法可以包括:
S101:获取目标对象的位置以及碰撞体的位置,目标对象为轴对齐四边形,碰撞体为轴对齐四边形或者圆形。
碰撞体可以为需要进行移动的对象,可以理解的是,碰撞体可以在一定的范围中移动,例如在屏幕显示的范围中移动,也可以在限定的部分区域中移动。碰撞体可以是根据用户持续的移动操作进行移动,也可以根据用户的单次或者是多次操作不断的调整移动的方向。
可以理解的是,碰撞体的位置是根据碰撞体的移动的过程来确定的,本申请实施例中不限定碰撞体位置的获取方式,在一种可能的实现方式中,可以按照预设的时间间隔获取碰撞体的位置。
目标对象可以是碰撞体碰撞的对象,目标对象的位置可以是固定不动的,也可以是处于移动变化中的,可以根据碰撞体移动的范围或者是移动的方向来确定目标对象。例如,当碰撞体移动到右下的区域时,右下区域范围中可能会和碰撞体发生碰撞的对象都可以是目标对象。可以理解的是,在一次碰撞中,目标对象可以为一个。
本申请实施例中不限定目标对象和碰撞体的具体形状,在一种可能的实现方式中,目标对象可以为轴对齐四边形,碰撞体可以为轴对齐四边形或者圆形。
S102:根据目标对象的位置以及碰撞体的位置,判断目标对象与碰撞体是否存在碰撞。
可以理解的是,可以根据目标对象的位置和碰撞体的位置判断目标对象和碰撞体是否存在碰撞,在一种可能的实现方式中,可以通过判断目标对象的位置和碰撞体的位置是否具有重叠的区域,来确定目标对象和碰撞体是否存在碰撞。当目标对象和碰撞体具有边界重合时,也可以认为目标对象和碰撞体发生碰撞,即目标对象和碰撞体处于接触状态,也就是刚刚发生碰撞的状态。
关于“根据目标对象的位置以及碰撞体的位置,判断目标对象与碰撞体是否存在碰撞”的具体实现方式将在后续实施例中详细说明。
S103:如果目标对象与碰撞体存在碰撞,计算碰撞体侵入目标对象的第一距离以及侵入方向,控制碰撞体向侵入方向的反方向移动第一距离。
需要说明的是,碰撞体侵入目标对象的第一距离可以是根据碰撞体与目标对象的重叠区域和侵入方向确定的,可以为侵入方向上的重叠区域的长度。在一种可能的实现方式中,第一距离可以根据目标对象的边界上的目标点与碰撞体的中心点的距离进行计算。
侵入方向可以是指碰撞体与目标对象发生碰撞的方向,侵入方向可以是水平和竖直方向上的方向,上下左右方向中的任意一种方向;也可以为具有一定斜度的方向。侵入方向可以是以目标对象为参照物确定的方向,例如,当碰撞体向右移动,目标对象在碰撞体移动方向的前方时,碰撞体就会从目标对象左边侵入,侵入方向就可以为从左侵入,其他方向同理。
关于“如果目标对象与碰撞体存在碰撞,计算碰撞体侵入目标对象的第一距离以及侵入方向,控制碰撞体向侵入方向的反方向移动第一距离”的具体实现方式将在后续实施例中详细说明。
可以理解的是,在确定碰撞体侵入目标对象的侵入方向和第一距离后,可以控制碰撞体向侵入方向的反方向移动第一距离,也就是将碰撞体先移动出目标对象的位置的范围,到达碰撞体与目标对象刚发生碰撞时还未侵入的位置,从而后续步骤可以从该位置控制碰撞体的移动,达到精准控制碰撞的目的。其中,侵入方向的反方向可以根据侵入方向确定,例如,当侵入方向为碰撞体从右侵入目标对象时,侵入方向为从右侵入,侵入方向的反方向就为向左。
S104:根据碰撞体的原始移动方向以及碰撞体的原始移动速度,确定碰撞体的碰撞后移动方向与碰撞后移动速度。
需要说明的是,碰撞体的原始移动方向是碰撞体在与目标对象发生碰撞之前的移动方向,原始移动速度是碰撞体在与目标对象发生碰撞之前的移动速度。原始移动方向和侵入方向并不能等同,原始移动方向是以碰撞体为参照的移动方向,而侵入方向是以目标对象为参照的方向。在一些可能的情况中,侵入方向和原始移动方向可以为反方向;在另一些情况中,侵入方向是原始移动方向的分解后的部分方向的反方向。例如,当碰撞体以斜向上的原始移动方向移动时,从目标对象的左侧与目标对象发生碰撞,此时碰撞体的原始移动方向是斜向上的方向,但是侵入方向是从右的方向,侵入方向的反方向是向左的方向。
在本申请实施例中,根据碰撞体的原始移动方向以及碰撞体的原始移动速度,确定碰撞体的碰撞后移动方向与碰撞后移动速度,具体可以包括S201-S204,参见图2,该图为本申请实施例提供的另一种实现碰撞处理的方法的流程图。
S201:将碰撞体的原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量相乘,得到第一结果,如果第一结果小于零,将碰撞体的原始移动方向矢量的横坐标轴分量置零。
需要说明的是,第一方向矢量为碰撞体的碰撞点与中心点之间的方向矢量,第一方向矢量的方向为碰撞点到中心点的方向,其中碰撞点为在控制碰撞体向侵入方向的反方向移动第一距离之后,在目标对象的边上与碰撞体的中心点距离最近的点,可以是碰撞体在与目标对象刚进行碰撞时与目标对象的边界相接触的点。中心点是碰撞体的中心点,当碰撞体是圆形时,中心点是圆心,当碰撞体是轴对齐四边形时,中心点是该轴对齐四边形的几何中心。
在一种可能的实现方式中,由于碰撞体和目标对象发生碰撞,在碰撞时会抵消掉碰撞体原有的移动方向上的部分方向分量,所以将碰撞体的原始移动方向矢量与第一方向矢量先进行横纵坐标轴上矢量的分解,将碰撞体的原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量相乘,得到第一结果。当原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量存在,并且同方向时,第一结果是正值;当原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量其中一个不存在,也就是为零时,得到的第一结果为零;当原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量存在,但是方向不同时,第一结果是负值,小于零。可以理解的是,当第一结果小于零时,可以认为第一方向矢量的横坐标分量可以抵消掉原始移动方向矢量的横坐标轴分量,碰撞后的碰撞体不在横坐标的方向上进行移动。
S202:将碰撞体的原始移动方向矢量的纵坐标轴分量与第一方向矢量的纵坐标分量相乘,得到第二结果,如果第二结果小于零,将碰撞体的原始移动方向矢量的纵坐标轴分量置零。
第二结果的计算方法和置零方法与上述第一结果的计算方法和置零方法相似,在此不再赘述。
需要说明的是,本申请实施例中的横纵坐标轴是同一坐标系下的坐标轴,可以根据碰撞体和目标对象的位置建立统一的坐标系。在一种可能的实现方式中,横坐标轴的方向是水平向右的方向,纵坐标轴的方向是竖直向上的方向。
参见图3,该图为本申请实施例提供的一种碰撞场景的示意图。图中的轴对齐四边形是目标对象,左侧虚线组成的圆形是碰撞体在碰撞之前所在的位置,实线组成的圆形是碰撞体碰撞的位置,上方虚线组成的圆形是碰撞体在碰撞之后的位置。原始移动方向矢量和第一方向矢量进行分解,其中原始移动方向矢量分解为水平向右的方向矢量和竖直向上的方向矢量,水平向右的方向矢量和水平向左的方向矢量相乘后得到第一结果,第一结果小于零,将原始移动方向矢量的横坐标轴分量置零。竖直向上的方向矢量和水平向左的方向矢量相乘得到第二结果,第二结果为零,并不小于零,所以不将竖直方向上的分量置零,保留竖直方向上的原始移动方向矢量。并且可以根据未置零的竖直向上方向上的原始移动方向矢量确定碰撞后的移动方向。
S203:根据变更后的原始移动方向矢量确定碰撞体的碰撞后移动方向。
根据变更后的原始移动方向矢量确定碰撞后的移动方向,在一种可能的实现方式中,原始移动方向矢量的横坐标轴分量或者是纵坐标轴分量中其中一个分量置零,碰撞体可以根据原始移动方向矢量中未置零的坐标轴分量进行移动。在另一种可能的实现方式中,如果变更后的原始移动方向矢量的横坐标轴分量与纵坐标轴分量均置零,且当仅存在一个碰撞点时,将第一方向矢量的垂直方向确定为碰撞体的碰撞后移动方向。本申请实施例不限定碰撞体具体沿垂直方向移动的方向,在一种可能的实现方式中,可以随机的沿着第一方向矢量的垂直方向中的任意一个方向进行移动。
参见图4,该图为本申请实施例提供的另一种碰撞场景的示意图。如图所示,当碰撞体以斜向右下45度,与目标对象碰撞时,仅存在一个碰撞点,第一方向矢量和原始移动方向矢量的横纵坐标的分量均置零,此时碰撞体在碰撞后可以沿第一方向矢量的垂直方向移动,可以随机的沿斜向右上45度移动,也可以沿斜向左下45度移动。
本申请实施例中不限定,当变更后的原始移动方向矢量的横坐标轴分量与纵坐标轴分量均置零,碰撞体与目标对象存在多个碰撞点时,碰撞体的移动方向,在一种可能的实现方式中,当碰撞体与目标对象存在多个碰撞点时,可以停止移动。参见图5,该图为本申请实施例提供的另一种碰撞场景的示意图。如图5左图所示,当碰撞体斜向右下45°与两个目标对象组成的直角相撞时,存在两个碰撞点,对应的第一方向矢量是水平向左以及竖直向上的,变更后的原始移动方向矢量的横坐标轴分量与纵坐标轴分量均会置零,此时碰撞体可以停止运动。如图5右图所示,当碰撞体竖直向下运动时,与左右两边的目标对象相撞,存在两个碰撞点,对应的第一方向矢量是斜向右上和斜向左上45°此时变更后的原始移动方向矢量的横坐标轴分量与纵坐标轴分量为零,碰撞体可以停止移动,停留在虚线组成的碰撞体所在的位置。
S204:将碰撞体的原始移动速度确定为碰撞体的碰撞后移动速度。
在确定碰撞后的移动方向之后,可以将碰撞体的原始移动速度确定为碰撞后的移动速度。可以理解的是,碰撞对于碰撞体的移动方向具有影响,但是不影响碰撞体的移动的速度。
在另一种可能的实现方式中,在碰撞体与目标对象发生碰撞后,碰撞体可能会反弹,可以将碰撞体的原始移动方向的反方向确定为碰撞体的碰撞后移动方向,将碰撞体的原始移动速度确定为碰撞体的碰撞后移动速度。
参见图6,该图为本申请实施例提供的另一种碰撞场景的示意图。如图所示,轴对齐四边形为目标对象,实线组成的圆形是发生碰撞的碰撞体,最左侧的虚线组成的圆形是未发生碰撞的碰撞体,中间的虚线组成的圆形是碰撞后的碰撞体。碰撞体原始移动方向是水平向右,碰撞后发生反弹,碰撞后的移动方向是水平向左,是原始移动方向的反方向。
本申请实施例中不限定碰撞体在碰撞后发生反弹或者是抵消部分方向后运动的条件,碰撞体在碰撞之后的运动可以根据预先设置的目标对象或者是碰撞体的性质决定。例如,在一种可能的游戏的应用场景中,当碰撞体是用户释放的移动的技能时,如果该技能预先设置的性质中具有反弹的特性,该技能在与目标对象进行碰撞后会发生反弹。又比如,在另一种可能的游戏的应用场景中,如果目标对象是碰撞体移动路径上的障碍物时,碰撞体可以在碰撞之后抵消掉部分移动方向,可以保留部分分量的原始移动方向继续移动。
S105:按照碰撞体的碰撞后移动方向与碰撞后移动速度,控制碰撞体运动。
在确定碰撞体的碰撞后的移动方向和移动速度后,可以根据碰撞后的移动方向和移动速度控制碰撞体运动。碰撞体是在控制碰撞体向侵入方向的反方向移动第一距离后开始碰撞后的运动,也就是说,碰撞体在碰撞后的运动是从刚与目标对象接触,开始进行碰撞的位置,开始碰撞后的运动的。
在本申请实施例中,通过对目标对象和碰撞体的位置的获取和判断,将发生碰撞的碰撞体先进行位置的重定位,并根据原始移动方向和原始移动速度确定碰撞后的移动方向和移动速度,控制碰撞体按照碰撞后的移动方向和移动速度运动。可以实现对碰撞的检测以及根据原始的移动速度和移动方向确定正确的碰撞后的移动速度和方向,实现了对碰撞体在碰撞后较为准确的移动的调整,提高了碰撞体在碰撞后的移动的准确性。
在一些可能的情况中,由于检测碰撞体的位置并非是持续的,有可能会间隔一定的时间检测碰撞体是否发生碰撞,会出现当碰撞体移动过快,或者是检测的间隔时间较长时,碰撞体可能会穿透目标对象,此时检测到的碰撞体的位置与目标对象的位置可能不存在碰撞,但是实际上碰撞已经完成。
参见图7,该图为本申请实施例提供的另一种实现碰撞处理的方法的流程图。
S301:如果目标对象与碰撞体不存在碰撞,根据本次获取的碰撞体的位置与上一次获取的碰撞体的位置,确定碰撞体的移动范围。
由于是通过碰撞体的位置来确定碰撞体是否与目标对象发生碰撞,所以可以通过本次碰撞体的位置和上一次获取的碰撞体的位置确定碰撞体在这段时间中所移动的范围。需要说明的是,在碰撞体移动的过程中,在没有与目标对象发生碰撞时,或者是用户进行其他的相关操作时,碰撞体是不会随意的更改移动的方向的。
S302:根据目标对象的位置,判断碰撞体的移动范围是否与目标对象存在重叠。
通过碰撞体的移动范围与目标对象的位置,可以确定碰撞体在一定的时间间隔中的移动是否穿透目标对象。当碰撞体的移动范围与目标对象存在重叠时,可以认为碰撞体的移动穿透了目标对象,此时需要对碰撞体的移动进行碰撞后的修正。
本申请实施例中不限定判断碰撞体的移动范围和目标对象是否存在重叠的判断方法,在一种可能的实现方式中,可以根据碰撞体移动范围的各个坐标和目标对象的位置的坐标进行比较,当具有相同的坐标时,可以认为碰撞体的移动范围和目标对象存在重叠。
参见图8,该图为本申请实施例提供的另一种碰撞场景的示意图。如图所示,轴对齐四边形是目标对象,圆形是碰撞体,虚线组成的圆形是上一次获取到的碰撞体的位置,实线组成的圆形是本次获取到的碰撞体的位置,阴影区域的碰撞体的移动范围。移动范围和与目标对象存在重叠,发生了碰撞。
S303:如果不存在重叠,按照碰撞体的原始移动方向与原始移动速度,控制碰撞体运动。
当碰撞体的移动范围与目标对象不存在重叠时,可以认为碰撞体在移动的过程中并为与目标对象进行碰撞,碰撞体的移动不需要进行修正,可以继续按照碰撞体的原始移动方向和原始移动速度控制碰撞体继续运动。
S304:如果存在重叠,控制碰撞体向碰撞体的原始移动方向的反方向运动,直到目标对象与碰撞体存在碰撞,执行如果目标对象与碰撞体存在碰撞,计算碰撞体侵入目标对象的第一距离以及侵入方向,控制碰撞体向侵入方向的反方向移动第一距离以及后续步骤。
当碰撞体的移动范围与目标对象具有重叠时,可以认为此时的碰撞体已经穿透了目标对象,并未由于发生碰撞改变了原始的移动方向,所以先控制碰撞体向原始移动方向的反方向运动,回到碰撞体与目标对象存在碰撞的位置,再按照碰撞体与目标对象存在碰撞时,计算第一距离和侵入方向等后续的步骤对碰撞体的运动进行调整。
本申请实施例中提供的另一种实现碰撞处理的方法可以在碰撞体运动速度较快或者是获取位置的时间间隔较长的情况下对于碰撞进行再次的判断,可以准确的检测到碰撞的发生,并及时的进行碰撞体的移动的调整。可以避免由于不能准确的检测到碰撞的发生,导致的碰撞体在碰撞后移动的偏差。
在本申请实施例中,参见图9,该图为本申请实施例提供的另一种实现碰撞处理的方法的流程图。示出了当目标对象与碰撞体均为轴对齐四边形时,“根据目标对象的位置以及碰撞体的位置,判断目标对象与碰撞体是否存在碰撞”的一种可能的实现方式可以包括:
S401:根据目标对象的位置以及碰撞体的位置,判断目标对象与碰撞体的横坐标范围是否存在重叠,目标对象与碰撞体的纵坐标范围是否存在重叠。
由于目标对象和碰撞体均为轴对齐四边形,因此可以获取目标对象和碰撞体的横坐标和纵坐标的范围,可以理解的是,目标对象和碰撞体的横纵坐标可以为同一坐标系下的坐标范围,也可以为不同坐标系下的坐标范围再经过转换得到同一坐标系下的坐标范围。
本申请实施例中不限定判断横纵坐标范围是否存在重叠的方法,在一种判断可能的实施方式中,可以通过判断目标对象和碰撞体的横坐标范围中是否具有相同的坐标,判断目标对象和碰撞体的纵坐标范围中是否具有相同的坐标来分别判断横纵坐标范围是否具有重叠。当横纵坐标范围的边界相同时,目标对象和碰撞体发生碰撞,处于开始碰撞的接触状态。
S402:如果目标对象与碰撞体的横坐标范围、目标对象与碰撞体的纵坐标范围均存在重叠,确定目标对象与碰撞体存在碰撞。
可以理解的是,当目标对象与碰撞体的横坐标范围、目标对象与碰撞体的纵坐标范围均存在重叠时,目标对象和碰撞体的位置具有重叠的区域,目标对象和碰撞体存在着碰撞。
S403:如果目标对象与碰撞体的横坐标范围、目标对象与碰撞体的纵坐标范围不均存在重叠,确定目标对象与碰撞体不存在碰撞。
当仅有横坐标范围或者是纵坐标范围中的一个存在重叠时,目标对象和碰撞体的位置可能是在横坐标或者是纵坐标的方向上并列,而非碰撞。当横坐标范围和纵坐标范围均不存在重叠时,目标对象和碰撞体的位置没有重叠的区域,不存在碰撞的情况。
本申请实施例提供的一种实现碰撞处理的方法可以实现当碰撞体和目标对象均是轴对齐四边形时,通过横纵坐标的范围是否重叠进行是否存在碰撞的判断,可以较为准确的检测到碰撞的发生,避免了由于碰撞检测的不准确导致的未能对碰撞体进行移动调整的问题。
在本申请实施例中,参见图10,该图为本申请实施例提供的另一种实现碰撞处理的方法的流程图。示出了当目标对象为轴对齐四边形,碰撞体为圆形时,“根据目标对象的位置以及碰撞体的位置,判断目标对象与碰撞体是否存在碰撞”的一种可能的实现方式可以包括:
S501:根据目标对象的位置以及碰撞体的位置,计算目标对象的边上与碰撞体的圆心距离最近的目标点的坐标。
需要说明的是,目标点可以是碰撞体与目标对象碰撞时最先接触的点,目标点是位于目标对象的边界上的,与碰撞体的圆心距离最近的点。
计算目标对象的边上与碰撞体的圆心距离最近的目标点的坐标时,可以先根据目标对象的位置和碰撞体的位置,得到目标对象的几何中心的中心点的坐标和碰撞体的圆心的坐标,根据目标对象的位置得到目标对象半边长的数值。之后根据目标对象的中心点的坐标和碰撞体圆心的坐标得到中心点矢量,判断中心点矢量中的横坐标与零的关系,若横坐标小于零,则将目标对象的中心点的横坐标减去目标对象的半边长,得到目标点的横坐标值;若横坐标大于零,则将目标对象的中心点的横坐标加上目标对象的半边长得到目标点的横坐标值;若横坐标等于零,则目标点的横坐标与目标对象的中心点的横坐标相等。同理可以计算得到目标点的纵坐标,得到目标点的坐标。
参见图11,该图为本申请实施例提供的另一种碰撞场景的示意图。其中,轴对齐四边形是目标对象,圆形是碰撞体。a点是碰撞体的圆形,b点是目标对象的中心点,p点是目标点。目标对象的半边长是1,a点坐标是(2,2),b点坐标是(6,2),ba矢量为(-4,0),横坐标是小于零的,纵坐标等于零,所以将b点的横坐标数值减去半边长1得到5,得到目标点的横坐标,p点的纵坐标与b点的纵坐标相等。得到的p点的坐标是(5,2)。
S502:计算目标点与碰撞体的圆心之间的距离,得到第二距离。
本申请实施例中可以根据目标点的坐标和碰撞体的圆心的坐标计算得到第二距离,可以理解的是,第二距离是碰撞体圆心到目标对象最近的点之间的距离。
S503:如果第二距离小于或等于碰撞体的半径,确定目标对象与碰撞体存在碰撞。
当第二距离小于等于碰撞体的半径时,目标对象和碰撞体存在碰撞。当第二距离小于碰撞体的半径时,碰撞体的位置是与目标对象的位置具有重叠的,碰撞体是与目标对象发生碰撞。当第二距离等于碰撞体的半径时,碰撞体与目标对象是处于接触的状态的,处于刚刚发生碰撞的状态。
S504:如果第二距离大于碰撞体的半径,确定目标对象与碰撞体不存在碰撞。
当第二距离大于碰撞体的半径时,目标对象和碰撞体的位置不存在重叠的部分,目标对象和碰撞体不存在碰撞。
本申请实施例提供的一种实现碰撞处理的方法可以实现,当目标对象是轴对齐四边形时,碰撞体是圆形时,通过计算第二距离和碰撞体半径之间的关系进行是否存在碰撞的判断,可以较为准确的检测到当碰撞体是圆形时碰撞的发生,避免了由于碰撞检测的不准确导致的未能对碰撞体进行移动调整的问题。
进一步的,参见图12,该图为本申请实施例提供的另一种实现碰撞处理的方法的流程图。在本申请实施例中,示出了当目标对象为轴对齐四边形,碰撞体为圆形时,“如果目标对象与碰撞体存在碰撞,计算碰撞体侵入目标对象的第一距离以及侵入方向,控制碰撞体向侵入方向的反方向移动第一距离”的一种可能的实现方式可以包括:
S601:如果目标对象与碰撞体存在碰撞,计算碰撞体的半径与第二距离的差值,得到碰撞体侵入目标对象的第一距离。
可以理解的是,当目标对象和碰撞体存在碰撞时,可以通过计算碰撞体半径和第二距离的差值,得到碰撞体侵入目标对象的距离,也就是第一距离。
S602:将碰撞体的圆心与目标点之间的方向矢量分别与标准方向的矢量进行点乘,将满足预设条件的点乘结果对应的标准方向确定为侵入方向。
标准方向可以是指水平和竖直方向上的水平向右、水平向左、竖直向上和竖直向下四个方向,由于碰撞体是圆形,目标点是目标对象边界上距离圆心最近的点,所以碰撞体的圆心与目标点之间的方向矢量是垂直于目标对象的边界的,又由于目标对象是轴对齐的四边形,所以与目标对象的边界垂直的方向是四个标准方向中的一个。将碰撞体的圆心与目标点之间的方向矢量分别与标准方向的矢量进行点乘,点乘结果不为零的对应的标准方向是侵入方向。
S603:控制碰撞体向侵入方向的反方向移动第一距离。
在得到第一距离和侵入方向后,将碰撞体向侵入方向的反方向移动第一距离,将碰撞体移动至碰撞体与目标对象接触的位置,以便进行后续步骤对碰撞体碰撞后的运动的调整。
本申请实施例提供的一种实现碰撞处理的方法是当目标对象是轴对齐四边形时,碰撞体是圆形时,通过碰撞体的半径与第二距离计算第一距离,以及根据碰撞体的圆心与目标点之间的方向矢量与标准方向的矢量确定侵入方向,可以较为准确的对碰撞的位置进行重定位,提高了碰撞后碰撞体运动的准确性。
参见图13,该图为本申请实施例提供的另一种实现碰撞处理的方法的流程图。
S701:碰撞检测。
根据目标对象的位置以及碰撞体的位置,判断目标对象与碰撞体是否存在碰撞。
S702:碰撞重定位。
如果目标对象与碰撞体存在碰撞,计算碰撞体侵入目标对象的第一距离以及侵入方向,控制碰撞体向侵入方向的反方向移动第一距离,进行碰撞位置的重定位。
S703:碰撞调整。
根据碰撞体的原始移动方向以及碰撞体的原始移动速度,确定碰撞体的碰撞后移动方向与碰撞后移动速度,按照碰撞体的碰撞后移动方向与碰撞后移动速度,控制碰撞体运动。执行S705,获取并更新碰撞体的移动位置。
S704:移动范围检测。
如果目标对象与碰撞体不存在碰撞,根据本次获取的碰撞体的位置与上一次获取的碰撞体的位置,确定碰撞体的移动范围。根据目标对象的位置,判断碰撞体的移动范围是否与目标对象存在重叠。如果存在重叠,执行S702碰撞重定位及后续步骤。如果仍不存在重叠,更新碰撞体的移动位置。
S705:更新位置。
获取目标对象的位置以及碰撞体的位置,并持续更新。
本申请实施例提供的一种实现碰撞处理的方法通过更新碰撞体的位置可以及时的发现碰撞的发生并进行处理。该方法通过对碰撞的检测以及移动范围的检测较为准确的判断碰撞是否发生,在碰撞后进行碰撞重定位和碰撞的调整,提高了碰撞体在碰撞后的移动的准确性。
本申请实施例对一种实现碰撞处理的装置进行介绍。参见图14,该图为本申请实施例提供的一种实现碰撞处理的装置的结构示意图。
获取单元801,用于获取目标对象的位置以及碰撞体的位置,所述目标对象为轴对齐四边形,所述碰撞体为轴对齐四边形或者圆形;
判断单元802,用于根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞;
重定位单元803,用于如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离;
碰撞运动计算单元804,用于根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度;
碰撞运动控制单元805,用于按照所述碰撞体的碰撞后移动方向与碰撞后移动速度,控制所述碰撞体运动。
可选的,所述装置还包括:
移动范围确定单元,用于如果所述目标对象与所述碰撞体不存在碰撞,根据本次获取的所述碰撞体的位置与上一次获取的所述碰撞体的位置,确定所述碰撞体的移动范围;
重叠判断单元,用于根据所述目标对象的位置,判断所述碰撞体的移动范围是否与所述目标对象存在重叠;
运动控制单元,用于如果不存在重叠,按照所述碰撞体的原始移动方向与原始移动速度,控制所述碰撞体运动;
移动单元,用于如果存在重叠,控制所述碰撞体向所述碰撞体的原始移动方向的反方向运动,直到所述目标对象与所述碰撞体存在碰撞。
可选的,当所述目标对象与所述碰撞体均为轴对齐四边形,所述判断单元包括:
坐标判断子单元,用于根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体的横坐标范围是否存在重叠,所述目标对象与所述碰撞体的纵坐标范围是否存在重叠;
第一碰撞确定子单元,用于如果所述目标对象与所述碰撞体的横坐标范围、所述目标对象与所述碰撞体的纵坐标范围均存在重叠,确定所述目标对象与所述碰撞体存在碰撞;如果所述目标对象与所述碰撞体的横坐标范围、所述目标对象与所述碰撞体的纵坐标范围不均存在重叠,确定所述目标对象与所述碰撞体不存在碰撞。
可选的,当所述目标对象为轴对齐四边形,所述碰撞体为圆形,所述判断单元包括:
第二距离计算子单元,用于根据所述目标对象的位置以及所述碰撞体的位置,计算所述目标对象的边上与所述碰撞体的圆心距离最近的目标点的坐标;计算所述目标点与所述碰撞体的圆心之间的距离,得到第二距离;
第二碰撞确定子单元,用于如果所述第二距离小于或等于所述碰撞体的半径,确定所述目标对象与所述碰撞体存在碰撞;如果所述第二距离大于所述碰撞体的半径,确定所述目标对象与所述碰撞体不存在碰撞。
可选的,所述重定位单元包括:
第一距离计算子单元,用于如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体的半径与所述第二距离的差值,得到所述碰撞体侵入所述目标对象的第一距离;
侵入方向确定子单元,用于将所述碰撞体的圆心与所述目标点之间的方向矢量分别与标准方向的矢量进行点乘,将满足预设条件的点乘结果对应的标准方向确定为侵入方向;
重定位移动子单元,用于控制所述碰撞体向所述侵入方向的反方向移动所述第一距离。
可选的,所述碰撞运动计算单元包括:
横坐标计算子单元,用于将所述碰撞体的原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量相乘,得到第一结果,如果所述第一结果小于零,将所述碰撞体的原始移动方向矢量的横坐标轴分量置零;所述第一方向矢量为所述碰撞体的碰撞点与中心点之间的方向矢量;所述碰撞点为在控制所述碰撞体向所述侵入方向的反方向移动所述第一距离之后,在所述目标对象的边上与所述碰撞体的中心点距离最近的点;
纵坐标计算子单元,用于将所述碰撞体的原始移动方向矢量的纵坐标轴分量与所述第一方向矢量的纵坐标分量相乘,得到第二结果,如果所述第二结果小于零,将所述碰撞体的原始移动方向矢量的纵坐标轴分量置零;
方向确定子单元,用于根据变更后的原始移动方向矢量确定所述碰撞体的碰撞后移动方向;
速度确定子单元,用于将所述碰撞体的原始移动速度确定为所述碰撞体的碰撞后移动速度。
可选的,所述方向确定子单元还用于如果变更后的原始移动方向矢量的横坐标轴分量与纵坐标轴分量均置零,且当仅存在一个碰撞点时,将所述第一方向矢量的垂直方向确定为所述碰撞体的碰撞后移动方向。
可选的,所述碰撞运动计算单元包括:
反弹运动计算单元,用于将所述碰撞体的原始移动方向的反方向确定为所述碰撞体的碰撞后移动方向;
将所述碰撞体的原始移动速度确定为所述碰撞体的碰撞后移动速度。
本申请实施例提供的实现碰撞处理的方法通过对目标对象和碰撞体的位置的获取和判断,将发生碰撞的碰撞体先进行位置的重定位,并根据原始移动方向和原始移动速度确定碰撞后的移动方向和移动速度,控制碰撞体按照碰撞后的移动方向和移动速度运动。由此可见,本申请实施例提供的方法根据碰撞体原始移动方向和原始移动速度确定碰撞后的移动方向和移动速度,可以在检测到碰撞后对碰撞体的移动进行正确的调整,提高了碰撞体在碰撞后的移动的准确性。可以解决现有技术中,由于不对碰撞进行检测或者是碰撞后没有参考碰撞体碰撞前的运动而导致的碰撞体在碰撞后的运动的不准确或者是具有偏差的问题。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种实现碰撞处理的方法,其特征在于,所述方法包括:
获取目标对象的位置以及碰撞体的位置,所述目标对象为轴对齐四边形,所述碰撞体为轴对齐四边形或者圆形;
根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞;
如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离;所述第一距离是所述侵入方向上所述碰撞体与所述目标对象的重叠区域的长度,所述侵入方向是所述碰撞体与所述目标对象发生碰撞的方向;
根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度;
按照所述碰撞体的碰撞后移动方向与碰撞后移动速度,控制所述碰撞体运动。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果所述目标对象与所述碰撞体不存在碰撞,根据本次获取的所述碰撞体的位置与上一次获取的所述碰撞体的位置,确定所述碰撞体的移动范围;
根据所述目标对象的位置,判断所述碰撞体的移动范围是否与所述目标对象存在重叠;
如果不存在重叠,按照所述碰撞体的原始移动方向与原始移动速度,控制所述碰撞体运动;
如果存在重叠,控制所述碰撞体向所述碰撞体的原始移动方向的反方向运动,直到所述目标对象与所述碰撞体存在碰撞,执行所述如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离以及后续步骤。
3.根据权利要求1所述的方法,其特征在于,当所述目标对象与所述碰撞体均为轴对齐四边形,所述根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞,包括:
根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体的横坐标范围是否存在重叠,所述目标对象与所述碰撞体的纵坐标范围是否存在重叠;
如果所述目标对象与所述碰撞体的横坐标范围、所述目标对象与所述碰撞体的纵坐标范围均存在重叠,确定所述目标对象与所述碰撞体存在碰撞;
如果所述目标对象与所述碰撞体的横坐标范围、所述目标对象与所述碰撞体的纵坐标范围不均存在重叠,确定所述目标对象与所述碰撞体不存在碰撞。
4.根据权利要求1所述的方法,其特征在于,当所述目标对象为轴对齐四边形,所述碰撞体为圆形,所述根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞,包括:
根据所述目标对象的位置以及所述碰撞体的位置,计算所述目标对象的边上与所述碰撞体的圆心距离最近的目标点的坐标;
计算所述目标点与所述碰撞体的圆心之间的距离,得到第二距离;
如果所述第二距离小于或等于所述碰撞体的半径,确定所述目标对象与所述碰撞体存在碰撞;
如果所述第二距离大于所述碰撞体的半径,确定所述目标对象与所述碰撞体不存在碰撞。
5.根据权利要求4所述的方法,其特征在于,所述如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离,包括:
如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体的半径与所述第二距离的差值,得到所述碰撞体侵入所述目标对象的第一距离;
将所述碰撞体的圆心与所述目标点之间的方向矢量分别与标准方向的矢量进行点乘,将满足预设条件的点乘结果对应的标准方向确定为侵入方向;
控制所述碰撞体向所述侵入方向的反方向移动所述第一距离。
6.根据权利要求1所述的方法,其特征在于,所述根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度,包括:
将所述碰撞体的原始移动方向矢量的横坐标轴分量与第一方向矢量的横坐标分量相乘,得到第一结果,如果所述第一结果小于零,将所述碰撞体的原始移动方向矢量的横坐标轴分量置零;所述第一方向矢量为所述碰撞体的碰撞点与中心点之间的方向矢量;所述碰撞点为在控制所述碰撞体向所述侵入方向的反方向移动所述第一距离之后,在所述目标对象的边上与所述碰撞体的中心点距离最近的点;
将所述碰撞体的原始移动方向矢量的纵坐标轴分量与所述第一方向矢量的纵坐标分量相乘,得到第二结果,如果所述第二结果小于零,将所述碰撞体的原始移动方向矢量的纵坐标轴分量置零;
根据变更后的原始移动方向矢量确定所述碰撞体的碰撞后移动方向;
将所述碰撞体的原始移动速度确定为所述碰撞体的碰撞后移动速度。
7.根据权利要求6所述的方法,其特征在于,所述根据变更后的原始移动方向矢量确定所述碰撞体的碰撞后移动方向,包括:
如果变更后的原始移动方向矢量的横坐标轴分量与纵坐标轴分量均置零,且当仅存在一个碰撞点时,将所述第一方向矢量的垂直方向确定为所述碰撞体的碰撞后移动方向。
8.根据权利要求1所述的方法,其特征在于,所述根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度,包括:
将所述碰撞体的原始移动方向的反方向确定为所述碰撞体的碰撞后移动方向;
将所述碰撞体的原始移动速度确定为所述碰撞体的碰撞后移动速度。
9.一种实现碰撞处理的装置,其特征在于,所述装置包括:
获取单元,用于获取目标对象的位置以及碰撞体的位置,所述目标对象为轴对齐四边形,所述碰撞体为轴对齐四边形或者圆形;
判断单元,用于根据所述目标对象的位置以及所述碰撞体的位置,判断所述目标对象与所述碰撞体是否存在碰撞;
重定位单元,用于如果所述目标对象与所述碰撞体存在碰撞,计算所述碰撞体侵入所述目标对象的第一距离以及侵入方向,控制所述碰撞体向所述侵入方向的反方向移动所述第一距离;所述第一距离是所述侵入方向上所述碰撞体与所述目标对象的重叠区域的长度,所述侵入方向是所述碰撞体与所述目标对象发生碰撞的方向;
碰撞运动计算单元,用于根据所述碰撞体的原始移动方向以及所述碰撞体的原始移动速度,确定所述碰撞体的碰撞后移动方向与碰撞后移动速度;
碰撞运动控制单元,用于按照所述碰撞体的碰撞后移动方向与碰撞后移动速度,控制所述碰撞体运动。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
移动范围确定单元,用于如果所述目标对象与所述碰撞体不存在碰撞,根据本次获取的所述碰撞体的位置与上一次获取的所述碰撞体的位置,确定所述碰撞体的移动范围;
重叠判断单元,用于根据所述目标对象的位置,判断所述碰撞体的移动范围是否与所述目标对象存在重叠;
运动控制单元,用于如果不存在重叠,按照所述碰撞体的原始移动方向与原始移动速度,控制所述碰撞体运动;
移动单元,用于如果存在重叠,控制所述碰撞体向所述碰撞体的原始移动方向的反方向运动,直到所述目标对象与所述碰撞体存在碰撞。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010170415.9A CN111346379B (zh) | 2020-03-12 | 2020-03-12 | 一种实现碰撞处理的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010170415.9A CN111346379B (zh) | 2020-03-12 | 2020-03-12 | 一种实现碰撞处理的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111346379A CN111346379A (zh) | 2020-06-30 |
CN111346379B true CN111346379B (zh) | 2023-05-12 |
Family
ID=71192769
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010170415.9A Active CN111346379B (zh) | 2020-03-12 | 2020-03-12 | 一种实现碰撞处理的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111346379B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113440855A (zh) * | 2021-06-30 | 2021-09-28 | 完美世界(北京)软件科技发展有限公司 | 多人在线游戏的攻击控制方法及装置、存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104881478A (zh) * | 2015-06-02 | 2015-09-02 | 吴小宇 | 一种网页页面定位识别系统及定位识别方法 |
CN105469406A (zh) * | 2015-11-30 | 2016-04-06 | 东北大学 | 一种基于包围盒与空间划分的虚拟物体碰撞检测方法 |
CN105512377A (zh) * | 2015-11-30 | 2016-04-20 | 腾讯科技(深圳)有限公司 | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 |
CN106215419A (zh) * | 2016-07-28 | 2016-12-14 | 腾讯科技(深圳)有限公司 | 碰撞控制方法及装置 |
CN106582024A (zh) * | 2016-10-14 | 2017-04-26 | 网易(杭州)网络有限公司 | 对象发生撞击的处理方法及装置 |
WO2017092252A1 (zh) * | 2015-11-30 | 2017-06-08 | 腾讯科技(深圳)有限公司 | 实时虚拟场景中碰撞体之间碰撞探测的方法、终端和存储介质 |
CN107609222A (zh) * | 2017-08-16 | 2018-01-19 | 北京控制工程研究所 | 一种空间机器人末端接触碰撞力计算方法 |
CN108714303A (zh) * | 2018-05-16 | 2018-10-30 | 深圳市腾讯网络信息技术有限公司 | 碰撞检测方法,设备及计算机可读存储介质 |
CN109966741A (zh) * | 2019-05-09 | 2019-07-05 | 腾讯科技(深圳)有限公司 | 位置更新方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101221198B1 (ko) * | 2011-01-06 | 2013-02-07 | 이화여자대학교 산학협력단 | Gpu에서 충돌 감지를 수행하는 방법 |
-
2020
- 2020-03-12 CN CN202010170415.9A patent/CN111346379B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104881478A (zh) * | 2015-06-02 | 2015-09-02 | 吴小宇 | 一种网页页面定位识别系统及定位识别方法 |
CN105469406A (zh) * | 2015-11-30 | 2016-04-06 | 东北大学 | 一种基于包围盒与空间划分的虚拟物体碰撞检测方法 |
CN105512377A (zh) * | 2015-11-30 | 2016-04-20 | 腾讯科技(深圳)有限公司 | 实时虚拟场景中圆柱碰撞体与凸体碰撞探测的方法和系统 |
WO2017092252A1 (zh) * | 2015-11-30 | 2017-06-08 | 腾讯科技(深圳)有限公司 | 实时虚拟场景中碰撞体之间碰撞探测的方法、终端和存储介质 |
CN106215419A (zh) * | 2016-07-28 | 2016-12-14 | 腾讯科技(深圳)有限公司 | 碰撞控制方法及装置 |
CN106582024A (zh) * | 2016-10-14 | 2017-04-26 | 网易(杭州)网络有限公司 | 对象发生撞击的处理方法及装置 |
CN107609222A (zh) * | 2017-08-16 | 2018-01-19 | 北京控制工程研究所 | 一种空间机器人末端接触碰撞力计算方法 |
CN108714303A (zh) * | 2018-05-16 | 2018-10-30 | 深圳市腾讯网络信息技术有限公司 | 碰撞检测方法,设备及计算机可读存储介质 |
CN109966741A (zh) * | 2019-05-09 | 2019-07-05 | 腾讯科技(深圳)有限公司 | 位置更新方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
sooxin.网游中人物的碰撞后反应控制.《CSDN博客》.2010, * |
结合轴对齐包围盒和空间划分的碰撞检测算法;于瑞云;《中国图象图形学报》;1925-1936 * |
Also Published As
Publication number | Publication date |
---|---|
CN111346379A (zh) | 2020-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105437251B (zh) | 一种定位机器人位置的方法及装置 | |
CN111346379B (zh) | 一种实现碰撞处理的方法及装置 | |
US9689971B2 (en) | Laser ranging calibration method and apparatus using the same | |
US5003505A (en) | Touchscreen/keyboard scanner | |
CN108267133B (zh) | 一种激光式反射板坐标系冗余标定方法及激光导航系统 | |
KR20220101605A (ko) | 로봇의 충전 베이스 충돌 방지 방법 | |
US20160252331A1 (en) | System, device, and method for detection of projectile target impact | |
Xu et al. | Compact visual control system for aligning and tracking narrow butt seams with CO 2 gas-shielded arc welding | |
CN108733065A (zh) | 一种机器人的避障方法、装置及机器人 | |
CN106646404A (zh) | 一种两长条形阵面相控阵雷达的误差修正方法及系统 | |
CN111381244B (zh) | 车辆的定位增强方法、装置、车辆和可读存储介质 | |
EP3586978A1 (en) | Coating method and coating device | |
CN113406582A (zh) | 角雷达安装偏差补偿方法 | |
KR102033633B1 (ko) | 절단장치 및 절단방법 | |
CN102522352B (zh) | 离子束稳定性的检测装置及检测方法 | |
CN113504527B (zh) | 一种雷达目标预测处理方法及系统 | |
US20150035749A1 (en) | Information processing device, information processing method, and program | |
CN112558046B (zh) | 一种具有多线激光雷达智能设备的下线验收方法 | |
CN108062778B (zh) | 一种拍摄装置的位置调节方法及控制装置 | |
CN113574582B (zh) | 碰撞概率计算装置、计算系统以及计算方法 | |
CN109702742B (zh) | 一种机械臂调平方法和装置 | |
CN113126604B (zh) | 一种机器人避障方法、装置、电子设备及存储介质 | |
TW202036194A (zh) | 移動平台圖資校正系統 | |
CN115184895B (zh) | 一种基于导航雷达的静态目标识别方法及系统 | |
CN112114909B (zh) | 机械手臂校正系统和机械手臂校正方法 |
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 |