首先,粒子系统里的Particle们为了符合大规模显示的特性,无法添加鼠标事件,所以貌似最简单的方法就是获取该粒子在屏幕上的位置以及大小,得到一个bounding box/ellipes,然后计算鼠标点击的位置是否在这个里面。
Particle的渲染位置及大小,被存储在一个renderRect:Rectangle里面,直接particle.renderRect即可获取。
需要注意的是,这里取出来的2D矩形,是以Papervision的3D场景中的原点为2D原点的(不是屏幕的左上角),而3D原点所对应在屏幕上的位置是(viewport.width/2, viewport.height/2),所以在计算之前还得先加减一下。
(由于这里我的摄像机是一直对准原点,即camera的target是原点,所以我不太清楚当摄像机不对准原点的情况下,原点所对应的2D位置会不会还是屏幕中心... ...)
得到鼠标的位置,粒子在屏幕上的位置及面积大小,就可以检测是否碰撞了。