首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种游戏中角色移动的碰撞检测方法 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:厦门飞信网络科技有限公司

摘要:本发明提供一种游戏中角色移动的碰撞检测方法,包括以下步骤:根据游戏角色半径,采用障碍物扩张算法,对静态障碍物进行扩张,得到静态障碍物扩张体;将其所覆盖的每个网格写入网格索引;对于动态障碍物,对其进行扩张,得到动态障碍物扩张体,并在游戏进行过程中刷新其覆盖的每个网格的网格索引;当游戏角色需要移动时,根据其位置和速度向量,检测到发生碰撞的障碍物,并计算碰撞点和碰撞后的移动方向。本发明是一种适用于游戏的,角色和障碍物进行碰撞检测以及确定发生碰撞后角色移动朝向的方法,方案较为简洁,同时兼顾效率。

主权项:1.一种游戏中角色移动的碰撞检测方法,其特征在于,包括以下步骤:步骤1,游戏场景中的地图为网格形式,具有多个网格Grid;步骤2,地图中显示多个静态障碍物;对于任意静态障碍物,表示为:静态障碍物Static_obsi,均进行以下操作:步骤2.1,游戏角色半径为R0;根据游戏角色半径R0,采用障碍物扩张算法,对静态障碍物Static_obsi进行扩张,得到静态障碍物扩张体EStatic_obsi;步骤2.2,对于静态障碍物扩张体EStatic_obsi所覆盖的每个网格Grid,均写入网格索引,网格索引为:静态障碍物S_obsi的ID;步骤3,在游戏进行过程中,对于动态障碍物,表示为动态障碍物Move_obsj,实时进行以下操作:步骤3.1,预先采用障碍物扩张算法,对动态障碍物Move_obsj进行扩张,得到动态障碍物扩张体EMove_obsj,并保存;步骤3.2,假设动态障碍物Move_obsj的当前位置为u1,读取到动态障碍物扩张体EMove_obsj,并按动态障碍物Move_obsj当前姿态,将动态障碍物扩张体EMove_obsj按当前姿态显示到当前位置u1;对于动态障碍物扩张体EMove_obsj所覆盖的每个网格Grid,均写入网格索引,网格索引为:动态障碍物Move_obsj的ID;步骤3.3,当动态障碍物Move_obsj发生移动时,假如从位置u1移动到位置u2,则首先清除步骤3.2写入的网格索引;再读取到动态障碍物扩张体EMove_obsj,并按动态障碍物Move_obsj当前姿态,将动态障碍物扩张体EMove_obsj按当前姿态显示到当前位置u2;对于动态障碍物扩张体EMove_obsj所覆盖的每个网格Grid,均写入网格索引,网格索引为:动态障碍物Move_obsj的ID;如此不断循环,实现对动态障碍物Move_obsj的动态显示;步骤4,在游戏进行过程中,当游戏角色role需要移动时,假设游戏角色role的质心当前所在位置为A点,其坐标为xA,yA,其游戏角色半径为R0,其速度向量为采用以下方式,确定游戏角色role按速度向量移动的碰撞点和碰撞后移动方向:步骤4.1,预设置搜索范围半径r;步骤4.2,将游戏角色role简化为点,点所在位置即为游戏角色role质心所在位置;以当前位置A点为起点,按速度向量的方向搜索r长度的运动路径;判断运动路径经过的网格Grid中,是否存在写入网格索引的网格Grid;如果没有,则表明游戏角色role按速度向量移动到下一位置时,不会与静态障碍物Static_obsi和动态障碍物Move_obsj发生碰撞;如果有,则获取运动路径经过的网格Grid中的所有网格索引,进而获得所有的静态障碍物S_obsi的ID和或动态障碍物Move_obsj的ID,此时将获得的静态障碍物S_obsi的ID和或动态障碍物Move_obsj的ID统称为障碍物ID;然后执行步骤4.3;步骤4.3,对于步骤4.2获得的每个障碍物ID对应的障碍物,其在地图中均已显示出障碍物扩张体;对于每个障碍物扩张体,采用以下方法,计算距离L:运动路径与障碍物扩张体的交点,为可能碰撞点,计算游戏角色role当前质心位置与可能碰撞点的距离,为距离L;然后,比较每个障碍物扩张体对应的距离L,得到距离L最小值对应的障碍物扩张体,表示为:障碍物扩张体E_obsmin;因此,运动路径与障碍物扩张体E_obsmin的交点,为最终确定的碰撞点,表示为:碰撞点dotelast;障碍物扩张体E_obsmin在碰撞点dotelast位置做法线,游戏角色role当前质心位置与碰撞点dotelast的连线,为游戏角色role运动路径,位于法线的一侧;当游戏角色role移动到碰撞点dotelast后,沿法线另一侧的障碍物扩张体E_obsmin的外边界移动,即为检测到的碰撞后的移动方向;至此确定碰撞点和碰撞后的移动方向;其中,步骤2.1中,根据游戏角色半径R0,采用障碍物扩张算法,对静态障碍物Static_obsi进行扩张,得到静态障碍物扩张体EStatic_obsi,具体为:步骤2.1.1,将静态障碍物Static_obsi简化为障碍物多边形;步骤2.1.2,判断障碍物多边形是否为凸多边形,如果是,直接进行障碍物扩张,得到静态障碍物扩张体EStatic_obsi;如果不是,则表明障碍物多边形为凹多边形,将凹多边形凸解为多个凸多边形,对于每个凸多边形,独立进行障碍物扩张,由此得到多个静态障碍物扩张体,再将多个静态障碍物扩张体合并,得到最终的静态障碍物扩张体EStatic_obsi;其中,对于凸多边形,采用以下方式,进行障碍物扩张:步骤2.1.2.1,假设凸多边形为n边形,具有n个顶点,n个顶点按顺时针排列,依次表示为:B1,B2,...,Bn;因此,按顺时针排列,得到的n条边向量依次表示为:游戏角色为半径R0的圆;获得游戏角色的圆内切六边形;该圆内切六边形的6个顶点按顺时针排列,依次表示为:K1,K2,...,K6;因此,按顺时针排列,得到的6条边向量依次表示为:6条边向量的方向和长度保持不变,移动6条边向量,使6条边向量的起点汇聚为一点K0,由此得到六边形扩张体EK,该六边形扩张体EK具有中心点K0,具有的6条边向量按顺时针方向排列,分别为:步骤2.1.2.2,首先对边向量进行扩展,扩展方式为:S1.1边向量的起点为点B1;将六边形扩张体EK平行移动,使六边形扩张体EK的中心点K0与点B1重合;点B1为边向量的终点,对边向量进行延长,延长点表示为B"1,由此得到第一参考线向量点B1为边向量的起点,使边向量作为第二参考线向量;S1.2六边形扩张体EK的6条边向量中,识别到极值大于第一参考线向量并且小于等于第二参考线向量的边向量集合,设边向量集合共有f个边向量,对f个边向量按顺时针排序,依次表示为:其中,g1,g2,...,gf∈[1,2,...,6];平移边向量使边向量的起点K0与点B1重合;然后,平移边向量使的起点K0与边向量的终点Kg1重合,依此类推,直到完成对边向量的平移操作,使边向量首尾相接;将点Kgf重命名为点C1;S1.3以点C1为起点,绘制边向量使边向量与边向量平行且等长,点C2为对边向量进行扩展后的终点;至此完成对边向量的扩展,终点为点C2;点B1到点C2经过的边向量,为扩展后的边向量;步骤2.1.2.3,对边向量进行扩展,扩展方式为:S2.1将六边形扩张体EK平行移动,使六边形扩张体EK的中心点K0与点C2重合;S2.2点C2为边向量的终点,对边向量进行延长,延长点表示为C"2,由此得到第一参考线向量以点C2为起点,作与边向量平行的边向量,作为第二参考线向量;S2.3六边形扩张体EK的6条边向量中,识别到极值大于第一参考线向量并且小于等于第二参考线向量之间的边向量集合,使得到的边向量集合的各个边向量按顺时针排序,并首尾相接后,首尾相接后的起点与点C2重合,首尾相接后的终点命名为点C3;S2.4以点C3为起点,绘制边向量使边向量与边向量平行且等长,点C4为对边向量进行扩展后的终点;至此完成对边向量的扩展,终点为点C4;点C2到点C4经过的边向量,为扩展后的边向量;依此类推,直到对边向量进行扩展;步骤2.1.2.4,最终形成静态障碍物扩张体EStatic_obsi。

全文数据:

权利要求:

百度查询: 厦门飞信网络科技有限公司 一种游戏中角色移动的碰撞检测方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。