假设房间内(注意房间是立体的空间)有大量的乒乓球,所有的乒乓球均可以与其他的乒乓球或是房间的六个表面发生碰撞。每一个碰撞发生后,平台发出一个该物体碰撞状态位开始的消息,该消息只包含该物体的碰撞状态——开始还是结束、 该物体的名称、以及给物体所有发生碰撞的点(Vector3)。碰撞消息是一次只发一个碰撞物体的消息。
    那么当出现一个球从上方碰撞一堆乒乓球时,大量状态位开始消息瞬间传来,而检测碰撞必须是实时的,出现的问题是一次碰撞检测的程序还没执行完之前,新的状态又开始接收。怎么处理呢?当然有一个问题是:是不是等着这组碰撞都接收完了再处理呢,这样做当然是不行的,而且球最终会以碰撞开始的状态与地面碰撞,直到下一次球离开地面为止,另外就是怎样来衡量该阶段结束那?希望各路大侠支招!!!

解决方案 »

  1.   

    首先,我描述一下球碰撞的过程:
    1,球A按一定轨迹运动;
    2,球A碰撞到轨迹上的一个球B
    3,碰撞之后球A和球B又会开始按另一个轨迹运动,分别重复1至3步如果在过程2中同时碰撞到2个球,其实也可以看出先碰撞B,再碰撞C这时候你想在过程2发送的碰撞之后处理碰撞消息,那么你应该,直到消息处理完之前,是不会执行第3步的,就像事件一样,windows的发送消息 SendMessage 就是这样这样,当出现一个球A从上方碰撞一堆乒乓球(B,C....Z)时,能导致A碰撞B,C,D,
    然后D导致B右碰撞E,....如此相互碰撞。如果按lz所想的发送消息方式,那么一碰撞就发送消息,发送之后立即返回,不管消息处理了没,
    这样,上面的碰撞过程可能很快完成,但会出现消息丢失的情况。如果改为消息在处理完之前不返回,那么根据处理消息事件所耗的时间,上面的碰撞过程可能会很漫长,这视乎运行平台的CPU能力,
    但可保证所有碰撞都会发生,所有消息都会处理。网络游戏一样,同样参加国战的时候,为什么有些玩家画面很卡,有些流畅的原因,因为他们要处理同样多的游戏人物,但各自的CPU,显卡能力不一样。ps:lz的头像是谁?呵呵

      

  2.   

    这个问题被一个写xna教程的老外搞定了......
    大致思路是把房间分成8个(或更多)立方体,
    实时记录每个球所在的立方体,
    只检测每个立方体中发生的碰撞.
      

  3.   

    这个问题被一个写xna教程的老外搞定了...... 
    大致思路是把房间分成8个(或更多)立方体, 
    实时记录每个球所在的立方体, 
    只检测每个立方体中发生的碰撞.正解