【发布时间】:2014-02-26 23:14:24
【问题描述】:
我有一个 500 宽和 400 高的屏幕,我有一个带有一堆形状的矢量。例如,假设向量有 2 种不同的形状。我希望物体从屏幕底部随机弹出,达到一定的上升高度然后回落(类似于游戏水果忍者,水果是我的形状)。
在我的主(视图)中,我有一个形状向量,我实例化了计时器,添加到数组并使用 translate 函数将它们放置在屏幕的底部。我的计时器接收了一个动作监听器,它基本上改变了形状的平移,向上移动,然后向下移动,但我的问题是所有形状都是同时开始的。
类似这样的:
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
}
};
我遇到的问题是所有形状都遵循同一个计时器,并同时开始弹出(没有延迟)......
关于如何避免这种情况的任何建议,或者是否有其他方法我应该尝试
【问题讨论】:
-
Resit 使用不同的定时器,维护一个简单的更新模型内对象状态的定时器。而是根据其他一些要求将新对象随机添加到形状列表中......
-
为了尽快获得更好的帮助,请发布MCTaRE(经过测试和可读的最小完整示例)。
-
and I have a vector with a bunch of shapes- 不要使用向量。而是使用ArrayList。
标签: java swing animation timer affinetransform