У меня есть экран, скажем, шириной 500 и высотой 400, и у меня есть вектор с кучей фигур. скажем, вектор имеет 2 разные формы, например. Я хочу, чтобы объект случайным образом выскакивал из нижней части экрана, достигал определенного подъема, а затем падал обратно (аналогично игровому фруктовому ниндзя, где фрукты — это мои фигуры).
В моем основном (представлении) у меня есть вектор форм, из которых я создаю экземпляры таймеров, добавляю их в массив и помещаю их в нижнюю часть экрана с помощью функции перевода. Мой таймер принимает прослушиватель действий, который в основном изменяет перевод формы, чтобы двигаться вверх до подъема, а затем вниз, но моя проблема в том, что все формы начинаются в одно и то же время, независимо от того.
Что-то вроде этого:
Shape f = new Shape(new Area(new Ellipse2D.Double(0, 50, 50, 50)));
f.translate(0, 400);
f.timer = new Timer( 10 , taskPerformer);
f.timer.start();
vector.add(f);
Shape f2 = new Shape(new Area(new Rectangle2D.Double(0, 50, 50, 50)));
f2.translate(200, 400);
f2.timer = new Timer( 10 , taskPerformer);
f2.timer.setInitialDelay(5000);
f2.timer.start();
vector.add(f2);
и мой слушатель действий:
Random generator = new Random();
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
for (Shape s : model.getShapes()) {
// Scale object using translate
// once reached ascent drop down
// translate to diffrenet part of the bottom of the screen
// delay its timer
}
update();
//basically repaints
}
};
У меня возникают проблемы, когда все фигуры следуют одному и тому же таймеру и начинают появляться одновременно (без задержки)...
Любые предложения о том, как этого избежать, или если есть другой подход, который я должен попробовать
and I have a vector with a bunch of shapes
- Не используйте вектор. Вместо этого используйтеArrayList
. - person camickr   schedule 19.02.2014