如何使硬币出现在游戏中?

时间:2019-01-23 03:20:04

标签: java arrays list swing

如何在游戏中显示列表或10个硬币的数组?这是相同的硬币图像。我希望我的精灵(Mario)拿起所有10个硬币,但我希望它们彼此相邻}也许我可以手动键入x个位置。

主要我不确定如何使硬币出现在屏幕上。

更新:当我手动键入每个硬币时,这些硬币就会出现(expirments [0] = tool.kit ..)。但是,它不适用于for循环。

public class Action extends JPanel implements ActionListener, KeyListener {
    Timer t = new Timer(5, this);
    private Image man;
    int x=0, y=490, a=(int) (Math.random() * 450 + 1), b=500; // make a random num
    Image img;
    Image [] coins = new Image [10];


    public Action() {
        super.setDoubleBuffered(true);
        t.start();
        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);
       img = Toolkit.getDefaultToolkit().createImage("background.png");
    }

    @Override
    public void paintComponent (Graphics g) {
        super.paintComponent(g);
        ImageIcon ii = new ImageIcon("realmario.png");
        man = ii.getImage();

        g.drawImage(img,0, 0, null);

        Graphics2D g2d = (Graphics2D)g;
        g2d.drawImage(man, x, y, this);
        g2d.drawImage(coins[1], a, b, this);

        for (int i = 0; i<coins.length; i++) {
            coins[i] = Toolkit.getDefaultToolkit().createImage("coin.png");
        }

    }

2 个答案:

答案 0 :(得分:1)

如果要放置一个彼此链接的对象,则必须使用x轴并正确调整。

例如。 img具有(3,7)像素,第一个像素为(10,10)。您需要获取x = 3并进行循环调整。

  • 1:初始值为10,10的img
  • 2:img在10 + 3,10
  • 3:img在10 + 3 + 3,10;等等
  •      //image dimension on x
         int image_x = 3;
         //initial placement on x,y
         int x=10,y=10;
         for(int i=0;i<coins.length; i++)
         { 
              //if same image is enough one coin
              g2d.drawImage(coin[7],x,y,this);
              x=x+image_x;
         }
    

    先检查坐标系。

    答案 1 :(得分:0)

    绘制同一图像10次,每次使用不同的坐标:

    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.net.URL;
    import javax.imageio.ImageIO;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
    
    public class SwingTest extends JFrame {
    
        public SwingTest()  {
    
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            add(new ImagePanel());
            pack();
            setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(()-> new SwingTest());
        }
    }
    
    class ImagePanel extends JComponent {
    
        BufferedImage coin = getImage();
        private static final int GAP =2;
    
        public ImagePanel() {
            setPreferredSize(new Dimension( 300, 200));
        }
    
        @Override
        protected void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            int x=0, y= GAP;
            for (int i = 0; i <3 ; i++) {
                g.drawImage(coin,x,y, this);
                x= x+ GAP + coin.getWidth();
            }
        }
    
        public static BufferedImage getImage() {
    
            try {
                URL url = new URL("http://www.btcwmx.ru/admin/uploads/img/bitcoin-gold.png");
                return ImageIO.read(url);
    
            } catch ( IOException ex) { ex.printStackTrace();}
    
            return null;
        }
    }
    

    enter image description here