Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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_Random - Fatal编程技术网

Java 多次随机运动图像

Java 多次随机运动图像,java,swing,animation,random,Java,Swing,Animation,Random,我在这里多次找到关于运动图像的好答案: 这对我想在我的项目中实现的目标非常有帮助,但我还需要一件事。火球存储在列表中,当我们按空格键时,它们会被涂上颜色。我想随机生成它们。有什么简单的方法可以做到这一点吗 主题代码: import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import jav

我在这里多次找到关于运动图像的好答案:

这对我想在我的项目中实现的目标非常有帮助,但我还需要一件事。火球存储在列表中,当我们按空格键时,它们会被涂上颜色。我想随机生成它们。有什么简单的方法可以做到这一点吗

主题代码:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.*;
import java.util.List;
import java.util.logging.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.Timer;

public class WannaBeStreetFighter extends JPanel {

private static final int D_W = 700;
private static final int D_H = 250;
private static final int X_INC = 10;

List<Fireball> fireBalls;
BufferedImage ryu;
BufferedImage fireball;
BufferedImage background;

public WannaBeStreetFighter() {

    try {
        ryu = ImageIO.read(new URL("http://www.sirlin.net/storage/street_fighter/ryu_hadoken_pose.png?__SQUARESPACE_CACHEVERSION=1226531909576"));
        background = ImageIO.read(new URL("http://fightingstreet.com/folders/variousinfofolder/ehondasbath/hondasfz3stage.gif"));
        fireball = ImageIO.read(new URL("http://farm6.staticflickr.com/5480/12297371495_ec19ded155_o.png"));
    } catch (IOException ex) {
        Logger.getLogger(WannaBeStreetFighter.class.getName()).log(Level.SEVERE, null, ex);
    }

    fireBalls = new LinkedList<>();

    Timer timer = new Timer(40, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Iterator<Fireball> it = fireBalls.iterator();
            while (it.hasNext()) {
                Fireball ball = it.next();
                if (ball.x > D_W) {
                    it.remove();
                    System.out.println(fireBalls.size());
                } else {
                    ball.x += X_INC;
                    repaint();
                }
            }
        }
    });
    timer.start();

    InputMap inputMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    inputMap.put(KeyStroke.getKeyStroke("SPACE"), "hadouken");
    getActionMap().put("hadouken", new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            fireBalls.add(new Fireball(fireball));
        }
    });

}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(background, 0, 0, D_W, D_H, this);
    g.drawImage(ryu, 50, 125, 150, 115, this);
    for (Fireball ball : fireBalls) {
        ball.drawFireball(g);
    }
}

@Override
public Dimension getPreferredSize() {
    return new Dimension(D_W, D_H);
}

private class Fireball {

    Image fireball;
    int x = 150;
    int y = 125;

    public Fireball(Image image) {
        fireball = image;
    }

    public void drawFireball(Graphics g) {
        g.drawImage(fireball, x, y, 75, 50, null);
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JFrame frame = new JFrame("Best Street Fighter ever");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new WannaBeStreetFighter());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    });
}
}
import java.awt.*;
导入java.awt.event.*;
导入java.awt.image.buffereImage;
导入java.io.IOException;
导入java.net.URL;
导入java.util.*;
导入java.util.List;
导入java.util.logging.*;
导入javax.imageio.imageio;
导入javax.swing.*;
导入javax.swing.Timer;
公共类WannaBeStreetFighter扩展了JPanel{
专用静态最终整数D_W=700;
专用静态最终整数D_H=250;
私有静态最终整数X_INC=10;
列出火球;
BuffereImage ryu;
缓冲图像火球;
缓冲图像背景;
公众想要的版权所有者(){
试一试{
ryu=ImageIO.read(新URL(“http://www.sirlin.net/storage/street_fighter/ryu_hadoken_pose.png?__SQUARESPACE_CACHEVERSION=1226531909576"));
后台=ImageIO.read(新URL(“http://fightingstreet.com/folders/variousinfofolder/ehondasbath/hondasfz3stage.gif"));
fireball=ImageIO.read(新URL(“http://farm6.staticflickr.com/5480/12297371495_ec19ded155_o.png"));
}捕获(IOEX异常){
Logger.getLogger(WannaBeStreetFighter.class.getName()).log(Level.SEVERE,null,ex);
}
fireBalls=新链接列表();
计时器计时器=新计时器(40,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
迭代器it=firebolls.Iterator();
while(it.hasNext()){
火球=it.next();
if(ball.x>D_W){
it.remove();
System.out.println(fireball.size());
}否则{
ball.x+=x_公司;
重新油漆();
}
}
}
});
timer.start();
InputMap InputMap=getInputMap(JComponent.WHEN_IN_FOCUSED_窗口);
put(KeyStroke.getKeyStroke(“空格”),“hadouken”);
getActionMap().put(“hadouken”,新的AbstractAction()){
@凌驾
已执行的公共无效操作(操作事件e){
火球。添加(新火球(火球));
}
});
}
@凌驾
受保护组件(图形g){
超级组件(g);
g、 drawImage(背景,0,0,D_W,D_H,this);
g、 drawImage(ryu,50,125,150,115,本);
用于(火球:火球){
抽火球(g);
}
}
@凌驾
公共维度getPreferredSize(){
返回新维度(D_W,D_H);
}
私人级火球{
图像火球;
int x=150;
int y=125;
公众火球(图片){
火球=图像;
}
公共空心抽火球(图g){
g、 drawImage(火球,x,y,75,50,空);
}
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JFrame=新JFrame(“有史以来最好的街头斗士”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(新的WannaBeStreetFighter());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
}

以下是一种随机创建球的方法:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class WannaBeStreetFighter extends JPanel {

    private static final int D_W = 700, D_H = 250, X_INC = 10;

    private final List<Fireball> fireBalls;
    private BufferedImage ryu, background;
    private final Random rand = new Random();

    public WannaBeStreetFighter() {

        try {
            //fighter image
            ryu = ImageIO.read(new URL("https://static1.squarespace.com/static/50f14d35e4b0d70ab5fc4f24/t/53f3260de4b0a13f9746a07c/1408443920310/ryu_hadoken_pose.png"));
            background = ImageIO.read(new URL("http://fightingstreet.com/folders/variousinfofolder/ehondasbath/hondasfz3stage.gif"));
        } catch (IOException ex) {  ex.printStackTrace();   }

        fireBalls = new LinkedList<>();

        Timer timer = new Timer(40, e -> {

            Iterator<Fireball> it = fireBalls.iterator();

            while (it.hasNext()) {
                Fireball ball = it.next();
                if (ball.x > D_W) {
                    it.remove();
                } else {
                    ball.x += X_INC;
                    repaint();
                }
            }

            addBalls();
        });

        timer.start();
    }

    private void addBalls() {

        if(rand.nextInt(100) > 5)  return; //reduce the frequency of adding balls
        fireBalls.add(new Fireball());
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(background, 0, 0, D_W, D_H, this);
        g.drawImage(ryu, 50, 125, 150, 115, this);
        for (Fireball ball : fireBalls) {
            ball.drawFireball(g);
        }
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(D_W, D_H);
    }

    private class Fireball {

        private final Image fireball;
        private int x = 180;       
        private final int y = 140;
        private static final int SIZE =25;

        public Fireball() {
            fireball = getBall();
        }

        public void drawFireball(Graphics g) {
            g.drawImage(fireball, x, y, 25, 25, null);
        }

        private BufferedImage getBall() {
            BufferedImage img = new BufferedImage(SIZE , SIZE,
                                                BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = img.createGraphics();
            g2.setColor(Color.RED);
            g2.fillOval(1, 1, SIZE - 2, SIZE - 2);
            g2.dispose();
            return img;
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Best Street Fighter ever");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new WannaBeStreetFighter());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Image;
导入java.awt.image.buffereImage;
导入java.io.IOException;
导入java.net.URL;
导入java.util.Iterator;
导入java.util.LinkedList;
导入java.util.List;
导入java.util.Random;
导入javax.imageio.imageio;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.Timer;
公共类WannaBeStreetFighter扩展了JPanel{
私有静态最终整数D_W=700,D_H=250,X_INC=10;
私人最终火球名单;
私人缓冲区映像ryu,背景;
私有最终随机兰德=新随机();
公众想要的版权所有者(){
试一试{
//战斗机形象
ryu=ImageIO.read(新URL(“https://static1.squarespace.com/static/50f14d35e4b0d70ab5fc4f24/t/53f3260de4b0a13f9746a07c/1408443920310/ryu_hadoken_pose.png"));
后台=ImageIO.read(新URL(“http://fightingstreet.com/folders/variousinfofolder/ehondasbath/hondasfz3stage.gif"));
}catch(IOException ex){ex.printStackTrace();}
fireBalls=新链接列表();
定时器=新定时器(40,e->{
迭代器it=firebolls.Iterator();
while(it.hasNext()){
火球=it.next();
if(ball.x>D_W){
it.remove();
}否则{
ball.x+=x_公司;
重新油漆();
}
}
addBalls();
});
timer.start();
}
私有void addBalls(){
如果(rand.nextInt(100)>5)返回;//减少添加球的频率
添加(新的Fireball());
}
@凌驾
受保护组件(图形g){
超级组件(g);
g、 drawImage(背景,0,0,D_W,D_H,this);
g、 drawImage(ryu,50,125,150,115,本);
用于(火球:火球){
抽火球(g);
}
}
@凌驾
公共维度getPreferredSize(){
返回新维度(D_W,D_H);
}
私人级火球{
私人最终图像火球;
私有整数x=180;
私人最终整数y=140;
专用静态最终整数大小=25;
公共火球(){
fireball=getBall();
}
公共空心抽火球(图g){
g、 drawImage(火球,x,y,25,25,空);
}
私有的