ParticleContactResolver _onParticleCollided(Particle p1, Particle p2, ParticleContact contact) { var ball = p1 as NewBallParticle; if (ball != null) { if (_checkContact((FBBall)ball.tag, (FBActor)p2.tag)) { //ball.setCollidedEventFlag(); contact.normal = ajustActorBallCollideNormal(-contact.normal, (FBActor)p2.tag, ball.velocity); return(new PCR_Obstacle() { particle = ball, contact = contact, restitution = config.ballCollisionRestitution_actorAndball }); } return(null); } ball = p2 as NewBallParticle; if (ball != null) { if (_checkContact((FBBall)ball.tag, (FBActor)p1.tag)) { //ball.setCollidedEventFlag(); contact.normal = ajustActorBallCollideNormal(contact.normal, (FBActor)p1.tag, ball.velocity); return(new PCR_Obstacle() { particle = ball, contact = contact, restitution = config.ballCollisionRestitution_actorAndball }); } return(null); } FBActor actor = (FBActor)p1.tag; if (actor != null && actor.ignoreCollision) { return(null); } FBActor actor2 = (FBActor)p2.tag; if (actor2 != null && actor2.ignoreCollision) { return(null); } //碰撞数据保存 actor.onActorCollided(actor2); actor2.onActorCollided(actor); return(new PCR_Particle_DontMove_KeepVelocity() { p1 = p1, p2 = p2, contact = contact, restitution = config.ballCollisionRestitution_actorAndactor }); }