如何轻弹一个物体,使其根据轻弹的力量无限期地以速度移动?

时间:2013-08-07 17:57:13

标签: java android object

我在图表上有一个圆圈,我希望能够轻弹它并使其无限移动并随着屏幕环绕。圆圈或球是我编码的方式,是一种观点。现在我只有一个圆圈,我可以通过以下代码触摸和拖动:

          //Creates view for ball
           FrameLayout flView = (FrameLayout) v;
           flView.setPaddingRelative(0, padding, 0, 0);

           //Creates new ball
           ball = new Ball(findViewById(R.id.main_view).getContext(), x, y, 10,padding);


           switch(event.getAction()){   

                case MotionEvent.ACTION_MOVE:       
                    flView.removeAllViews();
                    flView.addView(ball);

                    break;


                case MotionEvent.ACTION_DOWN:       

                    flView.removeAllViews();
                    flView.addView(ball);

                    break;


           }     

2 个答案:

答案 0 :(得分:0)

这就是我的所作所为。基本上我测量球的startPosition(x,y),以及用户第一次点击屏幕,球,等等的时间。然后,当用户在屏幕上移动他们的手指时,我计算给定球的当前(x,y)和时间的速度。然后我计算它正在移动的像素/毫秒。一旦他们拿起他们的身材,只需继续将X,Y速度添加到球的位置,然后根据屏幕大小进行修改,以便将其包裹起来。

// Don't keep adding and removing the ball from the view.  
// Just add it once on startup, then you can move the ball's 
// position when the user clicks on the screen.
flView.addView(ball);

switch(event.getAction()){
            case MotionEvent.ACTION_MOVE:
                ball.x = event.x;
                ball.y = event.y;
                int lastPositionX = ball.x
                int lastPositionY = ball.y
                long lastTime = System.currentTimeMillis();
                ball.velocity.x = (lastPositionX - startPositionX) / (lastTime - startTime);
                ball.velocity.y = (lastPositionY - startPositionY) / (lastTime - startTime);
                break;
            case MotionEvent.ACTION_DOWN:       
                ball.x = event.x;
                ball.y = event.y;
                ball.velocity.x = 0.0;
                ball.velocity.y = 0.0;
                startPositionX = ball.x;
                startPositionY = ball.y;
                long startTime = System.currentTimeMillis();
                break;
       } 

我不确定你提供的代码到底是什么,但是Move部分监听器看起来很糟糕,所以我删除了我认为错误的代码。现在它只是将球移动到人触摸的位置。之后,您必须弄清楚如何为场景设置动画。基本上你所要做的就是:

ball.x = (ball.velocity.x + ball.x) % screenSize;
ball.y = (ball.velocity.y + ball.y) % screenSize;

答案 1 :(得分:0)

对于AndEngine,您可以使用onFlick方法。我相信它可以测量方向和速度。剩下的就是你需要使用的任何转换,然后是动画。我暂时没有使用该方法,我忘记了实际的代码,但我相信你可以在网上找到它。对不起,我无法给你任何代码。