Надеюсь, что цветные круги у всех получились. Продолжаем начатое
На данный момент у вас должно все выглядеть как то вот так. Образно зеленые круги — наши овощи/фрукты, которые мы добавим позже, красные — монстры.
Сегодня мы сделаем так, чтобы при запуске нашей игры, наш круг не пересекался с другими, т.е. сделаем зону безопасности.
Добавим в GameManager следующие строчки:
private void initEnemyCircles() { SimpleCircle mainCircleArea = mainCircle.getCircleArea(); circles = new ArrayList<EnemyCircle>(); for (int i = 0; i< MAX_CIRCLES; i++) { EnemyCircle circle; do {circle= EnemyCircle.getRandomCircle(); } while (circle.isIntersect(mainCircleArea)); circles.add(circle); } calculateAndSetCirclesColor(); }
Т.е. определим CircleArea — наша область в которой нельзя создавать никакие другие круги кроме нашего (в начале игры).
Определим ее как:
public SimpleCircle getCircleArea() { return new SimpleCircle(x,y,rad*3); }
И добавим метод isIntersect — расчет радиуса области:
public boolean isIntersect(SimpleCircle circle) { return rad + circle.rad >= Math.sqrt(Math.pow(x-circle.x,2) + Math.pow(y-circle.y, 2)); }
Добавим движение всем остальным кругам (пока что случайное с рандомной скоростью, как сделать границы и изменить скорость думайте сами, там все по аналогии):
GameManager
public void onTouchEvent(int x, int y) { mainCircle.moveMainCircleWhenTouchAt(x, y); moveCircles(); } private void moveCircles() { for (EnemyCircle circle: circles) { circle.moveOnStep(); } }
EnemyCircle:
public void moveOnStep() { x += dx; y += dy; }
public EnemyCircle(int x, int y, int rad, int dx, int dy) { super(x,y,rad); this.dx = dx; this.dy = dy; }
int dx = 1+random.nextInt(RANDOM_SPEED); int dy = 1+random.nextInt(RANDOM_SPEED);
Запускаем, проверяем, все работает, но круги вылетают за пределы экрана — как править читайте выше (сами — ручками). Увидимся через две недели=)