栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java如何多次绘制相同的运动图像?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java如何多次绘制相同的运动图像?

@KevinWorkman
是正确的。你需要某种数据结构来容纳火球。在下面的示例中,我使用List的Fireball。

List<Fireball> fireBalls;...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, 50, 50, null);    }}

要绘制它们,我只是遍历它们。为了使它们向前移动,我只是增加了计时器中的x值,然后调用重绘

@Overrideprotected void paintComponent(Graphics g) {    super.paintComponent(g);    ...    for (Fireball ball : fireBalls) {        ball.drawFireball(g);    }}

这是完整的代码

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号