My way dealing with understanding structure of MouseJoint. Andengine
===

I have a little problem.I'm making air hockey game. I want to have drag/droping player body  so that it can collides/give force to other object in PhysicsWorld but !
I do want my body(touching) to stick and move exacly like my finger(and still having force!)
The code I gave you below have almost the effect I want but when I move my finger it... "bounces" around the area I touched. How to make it to stick my finger and still count force?
Can someone help me what to change in this code? Thank you a lot :)!

	private Body groundBody = null;
	public MouseJoint createMouseJoint(AnimatedSprite box , float x, float y){
            final Body boxBody = this.mPhysicsWorld.getPhysicsConnectorManager().findBodyByShape(box);
           

            float pixelToMeteRatio=64;
	    Vector2 v =boxBody.getWorldPoint(new Vector2(x/pixelToMeteRatio, y/pixelToMeteRatio));
           
            MouseJointDef mjd = new MouseJointDef();
            mjd.bodyA                               = groundBody;
            mjd.bodyB                               = boxBody;
            mjd.dampingRatio                = 1f;
            mjd.frequencyHz        	    = 30;
            mjd.maxForce                    = (float) (200.0f * boxBody.getMass());
            mjd.collideConnected            = true;
            mjd.target.set(v);
            return (MouseJoint) this.mPhysicsWorld.createJoint(mjd);
    }
	
	MouseJoint mjActive = null;
	private float pixelToMeteRatio = PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT;
	@Override
	public boolean onAreaTouched(
	                final TouchEvent        pSceneTouchEvent,
	                final ITouchArea        pTouchArea      ,
	                final float             pTouchAreaLocalX,
	                final float             pTouchAreaLocalY )
	{
	       
	        if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN) {
	               
	                this.runOnUpdateThread(new Runnable() {
	                        @Override
	                        public void run() {
	               
	                        final AnimatedSprite face = (AnimatedSprite)pTouchArea; //The touched body
	                        //If we have a active MouseJoint, we are just moving arround don't create an 2nd one.
	                        if( mjActive == null)
	                        {
	                                Vector2 vector = new Vector2(pTouchAreaLocalX/pixelToMeteRatio,pTouchAreaLocalY/pixelToMeteRatio);
	                                //=====================================
	                                // GROUNDBODY - Used for the MouseJoint
	                                //=====================================
	                                BodyDef groundBodyDef = new BodyDef();
	                                groundBodyDef.position.set(vector);
	                                groundBody      = mPhysicsWorld.createBody(groundBodyDef);
	                                //====================================
	                                // CREATE THE MOUSEJOINT
	                                //====================================
	                                mjActive        = createMouseJoint(face, pTouchAreaLocalX, pTouchAreaLocalY);
	                        }
	                }});
	               
	                return true;
	        }
	       
	return false;
	}
	
	
	@Override
        public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {
               
                if(this.mPhysicsWorld != null) {
               
           
                if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_MOVE) {
                       
                        this.runOnUpdateThread(new Runnable() {
                                @Override
                                public void run() {
                                       
                                if( mjActive != null ){ //If the MJ is active move it ..
                               
                                        // =========================================
                                        // MOVE THE MOUSEJOINT WITH THE FINGER..
                                        // =========================================
                                        Vector2 vec = new Vector2(pSceneTouchEvent.getX()/pixelToMeteRatio, pSceneTouchEvent.getY()/pixelToMeteRatio);
                                        mjActive.setTarget(vec);
                                       
                                }
                        }});
                        return true;
                }
               
                //===========================================
                // RELEASE THE FINGER FROM THE SCENE..
                //===========================================
                if(     pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP     ||     pSceneTouchEvent.getAction() == MotionEvent.ACTION_CANCEL
                  ) {
                 
                        this.runOnUpdateThread(new Runnable() {
                                @Override
                                public void run() {
                       
                               
                                if( mjActive != null )
                                {
                                        //======================================
                                        // DESTROY OUR MOUSEJOINT
                                        //======================================
                                        mPhysicsWorld.destroyJoint(mjActive);
                                   //     groundBody.setTransform(pSceneTouchEvent.getX(), pSceneTouchEvent.getY(), groundBody.get);
                                        mPhysicsWorld.destroyBody(groundBody);
                                        mjActive = null;
                                }
                       
                        }});
                       
             //         groundBody.setLinearVelocity(0,0);
                        return true;
                }
                }       
                return false;
      