0

我在图表上有一个圆圈,我希望能够轻弹它并让它无限期地移动并在它运行时环绕屏幕。圆圈或球是我编码它的方式,是一个视图。现在我只有一个可以触摸和拖动的圆圈,通过以下代码:

          //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;


           }     
4

2 回答 2

0

对于 AndEngine,您可以使用 onFlick 方法。我相信它可以测量方向和速度。剩下的就是您需要使用的任何转换,然后是动画。好久没用过这个方法了,具体的代码我也忘记了,不过我相信你可以在网上找到。对不起,我不能给你任何代码。

于 2013-08-09T15:56:22.053 回答
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;
于 2013-08-09T15:54:17.137 回答