1

私には仕事があります。画面上を移動するいくつかの(複数の)円を描くことです。それらをクリックした後、それらは移動を開始する必要があります。1つのサークルのみのコードを持っています。このタスクを実行する方法を教えてください。たとえば、5 つの円です。前もって感謝します!

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyView(this));
    }

    class MyView extends View {
        //public    Paint c;
        public  Paint p;

        private static final int RADIUS = 46;

        private int centerX;
        private int centerY;
        private int speedX = 50;
        private int speedY = 40;
        //private Paint paint; // Создай его где-нибудь там в конструкторе


        public MyView(Context context) {
            super(context);
            p = new Paint();
            p.setColor(Color.GREEN);
        }

        @Override
        protected void onSizeChanged(int w, int h, int oldW, int oldH) {
            centerX = w / 2;
            centerY = h / 2;
        }

        protected void onDraw(Canvas c) {
            int w = getWidth();
            int h = getHeight();
            centerX += speedX;
            centerY += speedY;
            int rightLimit = w - RADIUS;
            int bottomLimit = h - RADIUS;

            if (centerX >= rightLimit) {
                centerX = rightLimit;
                speedX *= -1;
            }
            if (centerX <= RADIUS) {
                centerX = RADIUS;
                speedX *= -1;
            }
            if (centerY >= bottomLimit) {
                centerY = bottomLimit;
                speedY *= -1;
            }
            if (centerY <= RADIUS) {
                centerY = RADIUS;
                speedY *= -1;
            }

            c.drawCircle(centerX, centerY, RADIUS, p);
            postInvalidateDelayed(200);  
        }
    }
}
4

2 に答える 2

1

この部分を変更する必要があります:

  private int centerX;
  private int centerY;
  private int speedX = 50;
  private int speedY = 40;

そしてそれをに変換します

class Circle {
  private int centerX;
  private int centerY;
  private int speedX = 50;
  private int speedY = 40;
  // add constructor here and other things
};

次に、サークルのコレクションを作成しますArrayList<Circle> circles

centerX += speedX;
centerY += speedY;
int rightLimit = w - RADIUS;
int bottomLimit = h - RADIUS;

if (centerX >= rightLimit) {
  centerX = rightLimit;
  speedX *= -1;
}
if (centerX <= RADIUS) {
  centerX = RADIUS;
  speedX *= -1;
}
if (centerY >= bottomLimit) {
  centerY = bottomLimit;
  speedY *= -1;
}
if (centerY <= RADIUS) {
  centerY = RADIUS;
  speedY *= -1;
}

あなたはすべてのサークルのためにそれをしなければなりません

for( i=0; i<circles.size(); i++) {
    circles[i].centerX += circles[i].speedX;
    circles[i].centerY += circles[i].speedY;

    // и так далее...

}

于 2012-11-13T11:39:13.730 に答える
0

異なる centerx 、centerY 、Radius および p で draw circle を 5 回呼び出す必要があります。

于 2012-11-13T11:40:08.187 に答える