首页 > 解决方案 > 为我的形状动画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);

    }
}

标签: java

解决方案


改变颜色也许这更好

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);
    }

推荐阅读