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,空);
}
私有的