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

これが私がすることです。基本的に、ボールの 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 に答える
0

AndEngine には、使用できる onFlick メソッドがあります。方向と速度を測定していると思います。あとは、必要な変換とアニメーションだけです。私はしばらくこの方法を使っていなかったので、実際のコードは忘れましたが、オンラインで見つけることができると確信しています。申し訳ありませんが、コードを提供できませんでした。

于 2013-08-09T15:56:22.053 に答える