zoukankan      html  css  js  c++  java
  • 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇04:碰撞检测》

    4.碰撞检测

    碰撞概述:

    游戏世界里,游戏对象不能做出如同在真实世界里的物理运动效果。对于大部分游戏来说,都要为其添加物理系统,让其可以模拟真实世界发生的物理运动。但是在这个打飞机游戏Demo中,是用脚本代码来实现对碰撞事件发生的检测的,下文将详细介绍实现的方法。

    碰撞检测原理:

    为物体创建子空Actor,作为物体包装盒用于对碰撞事件发生的检测,当包围盒直接发生交叉、包含等关系时候,判定触发碰撞事件,产生相应碰撞效果,流程图如图5-1所示。

     
    图5-1

    实现方法:

    步骤1:

    碰撞检测体包围盒的制作。在场景中Create(创建)->Empty Object(空物体,即空Actor),将空Actor拖动到物体上,成为其子空Actor。

    步骤2:

    检测碰撞事件是否发生,相关代码如下所示。

    01 public void Tick (float elapseTime)
    02 {
    03  //实时监测,监测碰撞事件是否发生
    04  for (int i = 0; i < Colliders.Count; i++)
    05  {
    06   for (int j = i+1; j < Colliders.Count; j++)
    07   {
    08    BoundingBox bb1 = Colliders[i].ColliderActor.WorldBoundingBox;
    09    BoundingBox bb2 = Colliders[j].ColliderActor.WorldBoundingBox;
    10    ClipStatus cs1 =  bb1.Contains(bb2);
    11    ClipStatus cs2 =  bb2.Contains(bb1);
    12    //两个互相监测,是否互相包含
    13    if (cs1 == ClipStatus.Intersecting || cs2 == ClipStatus.Intersecting )
    14    //状态监测
    15    {
    16     if (Colliders[j].ColliderActor.IsActive)
    17     {
    18      Colliders[i].Call(Colliders[j].ColliderActor);//回调函数
    19     }
    20     if (Colliders[i].ColliderActor.IsActive)
    21     {
    22      Colliders[j].Call(Colliders[i].ColliderActor);//回调函数
    23     }
    24    }
    25   }
    26  }
    27 }

    步骤3:

    碰撞结果。打飞机游戏Demo中,设定了两种碰撞结果。子弹击中敌人:敌人死亡,计分;敌人击中角色:角色死亡,游戏结束。


    引擎官方网站:http://www.genesis-3d.com.cn/

    官方论坛:http://bbs.9tech.cn/genesis-3d/

    官方千人大群:59113309   135439306

    YY频道-游戏开发大讲堂(完全免费,定期开课):51735288 

    Genesis-3D开源游戏引擎:游戏起源,皆因有我!!!

     


  • 相关阅读:
    s=a+aa+aaa+aaaa+aa...aaaa
    ibatis入门
    ibatis多参数的问题
    异步分页ajax
    8M的摄像头,30fps摄像时,60hz的LCD刷新频率,请问camera每秒向BB传输多少数据,如何计算
    android tcp通讯
    為什麼我的手機連Wi-Fi速度總是卡在75Mbps?Wi-Fi速度解惑~帶你一次看懂!
    mbps和MB/s是怎么换算的
    简说各种wifi无线协议的传输速率
    mil,mm与inch之间的转换
  • 原文地址:https://www.cnblogs.com/G-3D/p/3523802.html
Copyright © 2011-2022 走看看