java - 为我的形状动画java创建一个循环
问题描述
这是来自一个专注于继承的实验室。虽然我了解代码的所有继承方面,并且我成功地完成了实验,但我现在想创建一个循环来多次运行我的动画。
我提供的代码是一种形状动画(点、线、文本、矩形、正方形、椭圆和圆形),它们彼此继承代码(例如线、文本、矩形、椭圆扩展点;正方形扩展矩形和圆形扩展椭圆)。
总的来说,我想让这段代码的执行效率更高
package lab04.shapes;
import java.awt.Color;
/**
*
* This is an animated picture of an object falling out of one portal into another.
* The light gray Rectangle represents the beam in which the object transports through.
* A black Circle represents the object being transported.
* The two dark gray Ellipses represent the portals.
* The Squares represent the lights of the portal.
*
*/
public class Portal {
public static void main(String args[]) {
DrawableObjectList objList = new DrawableObjectList();
DrawingTablet tablet = new DrawingTablet("Mysterious Portal", 500, 500, objList);
// === Layout === //
Rectangle r1 = new Rectangle(200, 100, 235, 100, Color.gray);
objList.addDrawable(r1);
Square s1a = new Square(170, 100 , 20, Color.red);
objList.addDrawable(s1a);
Square s1b = new Square(310, 100, 20, Color.red);
objList.addDrawable(s1b);
Square s2a = new Square(170, 130, 20, Color.orange);
objList.addDrawable(s2a);
Square s2b = new Square(310, 130, 20, Color.orange);
objList.addDrawable(s2b);
Square s3a = new Square(170, 160, 20, Color.yellow);
objList.addDrawable(s3a);
Square s3b = new Square(310, 160, 20, Color.yellow);
objList.addDrawable(s3b);
Square s4a = new Square(170, 190, 20, Color.green);
objList.addDrawable(s4a);
Square s4b = new Square(310, 190, 20, Color.green);
objList.addDrawable(s4b);
Square s5a = new Square(170, 220, 20, Color.cyan);
objList.addDrawable(s5a);
Square s5b = new Square(310, 220, 20, Color.cyan);
objList.addDrawable(s5b);
Square s6a = new Square(170, 250, 20, Color.blue);
objList.addDrawable(s6a);
Square s6b = new Square(310, 250, 20, Color.blue);
objList.addDrawable(s6b);
Square s7a = new Square(170, 280, 20, Color.magenta);
objList.addDrawable(s7a);
Square s7b = new Square(310, 280, 20, Color.magenta);
objList.addDrawable(s7b);
Square s8a = new Square(170, 310, 20, Color.pink);
objList.addDrawable(s8a);
Square s8b = new Square(310, 310, 20, Color.pink);
objList.addDrawable(s8b);
Text t1 = new Text(185, 40, "Mysterious Portal Lit", Color.orange);
objList.addDrawable(t1);
Circle c1 = new Circle(250, 82, 25, Color.BLACK);
objList.addDrawable(c1);
Ellipse e1 = new Ellipse(250, 70, 50, 10, Color.darkGray);
objList.addDrawable(e1);
Ellipse e2 = new Ellipse(250, 375, 50, 10, Color.darkGray);
objList.addDrawable(e2);
/*
* Each time a change is made to the DrawableObjectList or to one of
* the Drawable objects that it contains you need to invoke repaint()
* on the DrawingTablet. This causes the Drawing tablet to repaint
* the scrren reflecting the changes.
*/
tablet.repaint();
/*
* sleep is a static method in the AnimationTimer class that causes
* the program to pause for a specified number of milliseconds when
* it is invoked. This line sleeps for 3 seconds.
*/
AnimationTimer.sleep(500);
// Object falls from the top Ellipse
// Each progression are the lights that are going to
// cycle down and return back to their original position
s1a.setColor(Color.red);
s1b.setColor(Color.red);
s2a.setColor(Color.orange);
s2b.setColor(Color.orange);
s3a.setColor(Color.yellow);
s3b.setColor(Color.yellow);
s4a.setColor(Color.green);
s4b.setColor(Color.green);
s5a.setColor(Color.cyan);
s5b.setColor(Color.cyan);
s6a.setColor(Color.blue);
s6b.setColor(Color.blue);
s7a.setColor(Color.magenta);
s7b.setColor(Color.magenta);
s8a.setColor(Color.pink);
s8b.setColor(Color.pink);
c1.move(250, 150);
tablet.repaint();
AnimationTimer.sleep(500);
// 1st Progression
s1a.setColor(Color.pink);
s1b.setColor(Color.pink);
s2a.setColor(Color.red);
s2b.setColor(Color.red);
s3a.setColor(Color.orange);
s3b.setColor(Color.orange);
s4a.setColor(Color.yellow);
s4b.setColor(Color.yellow);
s5a.setColor(Color.green);
s5b.setColor(Color.green);
s6a.setColor(Color.cyan);
s6b.setColor(Color.cyan);
s7a.setColor(Color.blue);
s7b.setColor(Color.blue);
s8a.setColor(Color.magenta);
s8b.setColor(Color.magenta);
c1.move(250, 180);
tablet.repaint();
AnimationTimer.sleep(500);
// 2nd Progression
s1a.setColor(Color.magenta);
s1b.setColor(Color.magenta);
s2a.setColor(Color.pink);
s2b.setColor(Color.pink);
s3a.setColor(Color.red);
s3b.setColor(Color.red);
s4a.setColor(Color.orange);
s4b.setColor(Color.orange);
s5a.setColor(Color.yellow);
s5b.setColor(Color.yellow);
s6a.setColor(Color.green);
s6b.setColor(Color.green);
s7a.setColor(Color.cyan);
s7b.setColor(Color.cyan);
s8a.setColor(Color.blue);
s8b.setColor(Color.blue);;
c1.move(250, 210);
tablet.repaint();
AnimationTimer.sleep(500);
// 3rd Progression
s1a.setColor(Color.blue);
s1b.setColor(Color.blue);
s2a.setColor(Color.magenta);
s2b.setColor(Color.magenta);
s3a.setColor(Color.pink);
s3b.setColor(Color.pink);
s4a.setColor(Color.red);
s4b.setColor(Color.red);
s5a.setColor(Color.orange);
s5b.setColor(Color.orange);
s6a.setColor(Color.yellow);
s6b.setColor(Color.yellow);
s7a.setColor(Color.green);
s7b.setColor(Color.green);
s8a.setColor(Color.cyan);
s8b.setColor(Color.cyan);
c1.move(250, 240);
tablet.repaint();
AnimationTimer.sleep(500);
// 4th Progression
s1a.setColor(Color.green);
s1b.setColor(Color.green);
s2a.setColor(Color.cyan);
s2b.setColor(Color.cyan);
s3a.setColor(Color.blue);
s3b.setColor(Color.blue);
s4a.setColor(Color.magenta);
s4b.setColor(Color.magenta);
s5a.setColor(Color.pink);
s5b.setColor(Color.pink);
s6a.setColor(Color.red);
s6b.setColor(Color.red);
s7a.setColor(Color.orange);
s7b.setColor(Color.orange);
s8a.setColor(Color.yellow);
s8b.setColor(Color.yellow);
c1.move(250, 270);
tablet.repaint();
AnimationTimer.sleep(500);
// 5th Progression
s1a.setColor(Color.yellow);
s1b.setColor(Color.yellow);
s2a.setColor(Color.green);
s2b.setColor(Color.green);
s3a.setColor(Color.cyan);
s3b.setColor(Color.cyan);
s4a.setColor(Color.blue);
s4b.setColor(Color.blue);
s5a.setColor(Color.magenta);
s5b.setColor(Color.magenta);
s6a.setColor(Color.pink);
s6b.setColor(Color.pink);
s7a.setColor(Color.red);
s7b.setColor(Color.red);
s8a.setColor(Color.orange);
s8b.setColor(Color.orange);
c1.move(250, 300);
tablet.repaint();
AnimationTimer.sleep(500);
// 6th Progression
s1a.setColor(Color.orange);
s1b.setColor(Color.orange);
s2a.setColor(Color.yellow);
s2b.setColor(Color.yellow);
s3a.setColor(Color.green);
s3b.setColor(Color.green);
s4a.setColor(Color.cyan);
s4b.setColor(Color.cyan);
s5a.setColor(Color.blue);
s5b.setColor(Color.blue);
s6a.setColor(Color.magenta);
s6b.setColor(Color.magenta);
s7a.setColor(Color.pink);
s7b.setColor(Color.pink);
s8a.setColor(Color.red);
s8b.setColor(Color.red);
c1.move(250, 330);
tablet.repaint();
AnimationTimer.sleep(500);
// 7th Progression
s1a.setColor(Color.red);
s1b.setColor(Color.red);
s2a.setColor(Color.orange);
s2b.setColor(Color.orange);
s3a.setColor(Color.yellow);
s3b.setColor(Color.yellow);
s4a.setColor(Color.green);
s4b.setColor(Color.green);
s5a.setColor(Color.cyan);
s5b.setColor(Color.cyan);
s6a.setColor(Color.blue);
s6b.setColor(Color.blue);
s7a.setColor(Color.magenta);
s7b.setColor(Color.magenta);
s8a.setColor(Color.pink);
s8b.setColor(Color.pink);
c1.move(250, 360);
tablet.repaint();
AnimationTimer.sleep(500);
// Circle disappears when reaches the bottom portal
// The lights have cycled through to their starting position
s1a.setColor(Color.red);
s1b.setColor(Color.red);
s2a.setColor(Color.orange);
s2b.setColor(Color.orange);
s3a.setColor(Color.yellow);
s3b.setColor(Color.yellow);
s4a.setColor(Color.green);
s4b.setColor(Color.green);
s5a.setColor(Color.cyan);
s5b.setColor(Color.cyan);
s6a.setColor(Color.blue);
s6b.setColor(Color.blue);
s7a.setColor(Color.magenta);
s7b.setColor(Color.magenta);
s8a.setColor(Color.pink);
s8b.setColor(Color.pink);
c1.setVisible(false);
tablet.repaint();
AnimationTimer.sleep(500);
}
}
解决方案
改变颜色也许这更好
private void changeColors(List<DrawableObjectList> objList) {
//distinct square in vetor
List<Square> squareList = new ArrayList<>();
objList.stream().filter(r -> r instanceof Square).map (r -> (Square) r).forEach(r-> squareList.add(r));
//new vetor with new colors
List<Square> newColors = new ArrayList<>();
squareList.stream().forEach(r-> newColors.add(squareList.indexOf(r)>1? squareList.get(squareList.indexOf(r)-2):squareList.get(squareList.size()-1)));
//now is just add new vetor newColors to main vetor objList, you can filter again using this .filter(r -> r instanceof Square).map (r -> (Square) r);
}
推荐阅读
- vba - 在没有任何 id 的 Pre Tag 中获取文本
- makefile - 仅显示当前目录,而不是所有路径,并在 makefile 中使用它们在 c 中 tar
- c# - 我可以将 JSON 数组反序列化为类的属性吗?
- python - Python中的静态方法和类方法有什么区别?
- java - 如何使用所有可能的对组合进行for循环(+- 1,+- 2)
- php - 如何将数组多个数组键和值从控制器传递到 Codeigniter 中的视图?
- consul - 使用 consul-template 向 nginx.conf 渲染 2000+ 服务
- python-3.x - Easygui 无法正常工作,repl.it 上的 Python 3.8.1
- c++ - 'max' 作为一个变量是如何工作的,即使它通常是一个函数?
- node.js - 在回调函数nodejs中传递属性