Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动画处理几个周期_Java_Swing_Animation - Fatal编程技术网

Java 动画处理几个周期

Java 动画处理几个周期,java,swing,animation,Java,Swing,Animation,我有一个动画,是一个从右向左移动的图像,这是一个循环。我想知道如果我必须开始几个循环,如果我想让几个图像一个接一个地从右向左移动,该怎么办。此时,我计算一个周期,并更新一个x值,我的组件和图像绘制为0+这个x值。如果我必须处理几个周期,我如何才能跟踪每个图像的x值? 谢谢。例如(达里尔) 导入java.awt.Color; 导入java.awt.Dimension; 导入java.awt.Graphics; 导入java.awt.Graphics2D; 导入java.awt.GridLayout

我有一个动画,是一个从右向左移动的图像,这是一个循环。我想知道如果我必须开始几个循环,如果我想让几个图像一个接一个地从右向左移动,该怎么办。此时,我计算一个周期,并更新一个x值,我的组件和图像绘制为0+这个x值。如果我必须处理几个周期,我如何才能跟踪每个图像的x值? 谢谢。

例如(达里尔)

导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.GridLayout;
导入java.awt.Point;
导入java.awt.Polygon;
导入java.awt.RenderingHints;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.Random;
导入javax.swing.AbstractAction;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.Timer;
公共类动画背景{
公共动画背景(){
随机=新随机();
JFrame=新的JFrame(“动画背景”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setresizeable(false);
最终MyJPanel面板=新MyJPanel();
面板.立根背景(颜色.黑色);
对于(int i=0;i<50;i++){
星=新星(新点(random.nextInt(490),random.nextInt(490));
star.setColor(新颜色(100+随机.nextInt(155),100+随机.nextInt(155),100+随机.nextInt(155));
star.setxIncr(-3+random.nextInt(7));
star.setyIncr(-3+random.nextInt(7));
面板。添加(星形);
}
panel.setLayout(新网格布局(10,1));
JLabel label=newjlabel(“这是一个星光背景”,JLabel.CENTER);
标签。设置前景(颜色。白色);
面板。添加(标签);
JPanel stopPanel=新的JPanel();
stopPanel.set不透明(假);
add(新的JButton(新的抽象动作(“停止这种疯狂!!”){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
panel.stopAnimation();
}
}));
面板。添加(stopPanel);
JPanel startPanel=新的JPanel();
startPanel.set不透明(假);
添加(新的JButton(新的抽象操作(“开始移动…”)){
私有静态最终长serialVersionUID=1L;
@凌驾
已执行的公共无效操作(操作事件e){
panel.startAnimation();
}
}));
面板。添加(startPanel);
框架。添加(面板);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
AnimationBackground AnimationBackground=新的AnimationBackground();
}
});
}
类星形延伸多边形{
私有静态最终长serialVersionUID=1L;
专用点位置=空;
私有颜色=Color.YELLOW;
私营企业国际新华社,银华社,;
静态最终整型宽度=500,高度=500;
星(点位置){
int x=位置x;
int y=位置y;
这个位置=位置;
这个。添加点(x,y+8);
这个。添加点(x+8,y+8);
这个。添加点(x+11,y);
此.添加点(x+14,y+8);
这个。添加点(x+22,y+8);
此.添加点(x+17,y+12);
此.添加点(x+21,y+20);
这个。添加点(x+11,y+14);
此.添加点(x+3,y+20);
这个。添加点(x+6,y+12);
}
公共空间设置颜色(颜色){
这个颜色=颜色;
}
公开作废动议(){
如果(位置.x<0 | |位置.x>宽度){
xIncr=-xIncr;
}
if(location.y<0 | | location.y>宽度){
yIncr=-yIncr;
}
翻译(信、音);
位置.setLocation(位置.x+xIncr,位置.y+yIncr);
}
公共无效设置xIncr(int xIncr){
this.xIncr=xIncr;
}
公共无效设置yIncr(int yIncr){
this.yIncr=yIncr;
}
公共颜色getColor(){
返回颜色;
}
}
类MyJPanel扩展了JPanel{
私有静态最终长serialVersionUID=1L;
private ArrayList stars=new ArrayList();
私有计时器=新计时器(20,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
对于(星星:星星){
star.move();
}
重新油漆();
}
});
公共void stopAnimation(){
if(timer.isRunning()){
timer.stop();
}
}
公共无效开始生效(){
如果(!timer.isRunning()){
timer.start();
}
}
@凌驾
public void addNotify(){
super.addNotify();
timer.start();
}
@凌驾
公共无效删除通知(){
super.removeNotify();
timer.stop();
}
MyJPanel(){
此.setPreferredSize(新维度(512、512));
}
公共空间添加(星号){
星号。添加(星号);
}
@凌驾
公共组件(图形g){
超级组件(g);
((Graphics2D)g).setRenderingHint(RenderingHints.KEY_抗锯齿,Rende
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class AnimationBackground {

    public AnimationBackground() {
        Random random = new Random();
        JFrame frame = new JFrame("Animation Background");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        final MyJPanel panel = new MyJPanel();
        panel.setBackground(Color.BLACK);
        for (int i = 0; i < 50; i++) {
            Star star = new Star(new Point(random.nextInt(490), random.nextInt(490)));
            star.setColor(new Color(100 + random.nextInt(155), 100 + random.nextInt(155), 100 + random.nextInt(155)));
            star.setxIncr(-3 + random.nextInt(7));
            star.setyIncr(-3 + random.nextInt(7));
            panel.add(star);
        }
        panel.setLayout(new GridLayout(10, 1));
        JLabel label = new JLabel("This is a Starry background.", JLabel.CENTER);
        label.setForeground(Color.WHITE);
        panel.add(label);
        JPanel stopPanel = new JPanel();
        stopPanel.setOpaque(false);
        stopPanel.add(new JButton(new AbstractAction("Stop this madness!!") {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                panel.stopAnimation();
            }
        }));
        panel.add(stopPanel);
        JPanel startPanel = new JPanel();
        startPanel.setOpaque(false);
        startPanel.add(new JButton(new AbstractAction("Start moving...") {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                panel.startAnimation();
            }
        }));
        panel.add(startPanel);
        frame.add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                AnimationBackground animationBackground = new AnimationBackground();
            }
        });
    }

    class Star extends Polygon {

        private static final long serialVersionUID = 1L;
        private Point location = null;
        private Color color = Color.YELLOW;
        private int xIncr, yIncr;
        static final int WIDTH = 500, HEIGHT = 500;

        Star(Point location) {
            int x = location.x;
            int y = location.y;
            this.location = location;
            this.addPoint(x, y + 8);
            this.addPoint(x + 8, y + 8);
            this.addPoint(x + 11, y);
            this.addPoint(x + 14, y + 8);
            this.addPoint(x + 22, y + 8);
            this.addPoint(x + 17, y + 12);
            this.addPoint(x + 21, y + 20);
            this.addPoint(x + 11, y + 14);
            this.addPoint(x + 3, y + 20);
            this.addPoint(x + 6, y + 12);
        }

        public void setColor(Color color) {
            this.color = color;
        }

        public void move() {
            if (location.x < 0 || location.x > WIDTH) {
                xIncr = -xIncr;
            }
            if (location.y < 0 || location.y > WIDTH) {
                yIncr = -yIncr;
            }
            translate(xIncr, yIncr);
            location.setLocation(location.x + xIncr, location.y + yIncr);
        }

        public void setxIncr(int xIncr) {
            this.xIncr = xIncr;
        }

        public void setyIncr(int yIncr) {
            this.yIncr = yIncr;
        }

        public Color getColor() {
            return color;
        }
    }

    class MyJPanel extends JPanel {

        private static final long serialVersionUID = 1L;
        private ArrayList<Star> stars = new ArrayList<Star>();
        private Timer timer = new Timer(20, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                for (Star star : stars) {
                    star.move();
                }
                repaint();
            }
        });

        public void stopAnimation() {
            if (timer.isRunning()) {
                timer.stop();
            }
        }

        public void startAnimation() {
            if (!timer.isRunning()) {
                timer.start();
            }
        }

        @Override
        public void addNotify() {
            super.addNotify();
            timer.start();
        }

        @Override
        public void removeNotify() {
            super.removeNotify();
            timer.stop();
        }

        MyJPanel() {
            this.setPreferredSize(new Dimension(512, 512));
        }

        public void add(Star star) {
            stars.add(star);
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            for (Star star : stars) {
                g.setColor(star.getColor());
                g.fillPolygon(star);
            }
        }
    }}