Как заставить массив монет появляться в игре? - PullRequest
0 голосов
/ 23 января 2019

Как сделать, чтобы в игре появился список или массив из 10 монет?Это то же изображение монеты.Я хочу, чтобы мой спрайт (Марио) поднял все 10 монет, но я хочу, чтобы они были рядом друг с другом}, возможно, я мог бы вручную напечатать x мест.

В основном я не уверен, как заставить монеты появляться на экране.

ОБНОВЛЕНИЕ: монеты появляются, когда я вручную набираю каждую монету (exp. Coins [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 голосов
/ 23 января 2019

Нарисуйте одно и то же изображение 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

0 голосов
/ 23 января 2019

Если вы хотите разместить объекты, связанные друг с другом, вы должны работать с осью X и корректно корректироваться.

Например. img имеет (3,7) пикселей, и сначала будет в (10,10). Вам нужно взять х = 3 и внести коррективы в цикл.

1: img при 10,10 (начальный) 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;
     }

Сначала проверьте систему координат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...