Нарисовать 2D-графику - PullRequest
       48

Нарисовать 2D-графику

0 голосов
/ 14 ноября 2018

Я делаю игру в Java, но я не поставил изображение, я уже пытался поставить его "drawimage", но это не работает правильно = (Я не знаю, где было бы лучшее место для сохранения изображенияи как было бы лучшим методом для вызова изображения.

    public void paint(Graphics2D g2){
    g2.setColor(getRandomColor());
    g2.fillOval((int)x, (int)y, (int)diametro, (int)diametro);
}


`

Этот код взят из моего класса астероидов, они круг (потому что я собираюсь проверить столкновение с кругами). Спасибо

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Я почти уверен, что вы хотите нарисовать изображение на панели.Прежде всего, я бы порекомендовал вам создать папку ресурсов внутри папки src projects и добавить туда все изображения.Как только вы закончите, вы должны загрузить изображение с imageIO и нарисовать его с помощью drawImage.Вот краткий пример:

package asteroid;

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class Nave {

    BufferedImage iconeNave;

    public Nave( ... ) {
        try{
        iconeNave = ImageIO.read(getClass().getResource("/resources/nave.png"));
        }catch(IOException e){e.printStackTrace();}
        catch(Exception e){e.printStackTrace();}
    }

    @Override
    public void paint(Graphics2D g2){
        AffineTransform at = new AffineTransform();
        at.translate((int)x + radius/2.5,(int)y + radius/2.5);
        at.rotate(Math.PI/2 + angle);
        at.translate(-iconeNave.getWidth()/2, -iconeNave.getHeight()/2);
        g2.drawImage(iconeNave, at, null);
    }
}
0 голосов
/ 14 ноября 2018

Чтобы создать изображение на Java, сначала нужно создать JPanel (по сути, окно на вашем экране).Это будет выглядеть примерно так (взято с javacodex.com):

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.ImageIO;

public class JPanelExample {

  public static void main(String[] arguments) throws IOException {

    JPanel panel = new JPanel();

    BufferedImage image = ImageIO.read(new File("./java.jpg"));
    JLabel label = new JLabel(new ImageIcon(image));
    panel.add(label);

    // main window
    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame("JPanel Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // add the Jpanel to the main window
    frame.add(panel); 

    frame.pack();
    frame.setVisible(true);

  }
}

Однако, я предполагаю, что под «изображением» вы подразумеваете фигуру, вытянутую на экран (поскольку вы используетеметод рисования, который рисует круг в вашем примере).Затем у вас есть код в правильном методе, но вам нужно реализовать JPanel (поскольку без JPanel или JFrame вы не сможете ничего отобразить на экране в графическом виде).

Вот пример, взятый из Board.java моей мини-игры Atari Breakout:

public class Board extends JPanel implements KeyListener {

    // Other Game Code

 public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLACK);

        // Shows lives left and score on screen
        g2.drawString("Lives left: " + lives, 400, 600);
        g2.drawString("Score: " + score, 400, 500);

        // Paints Walls (separate paint method created in wall class)
        topWall.paint(g2);
        bottomWall.paint(g2);
        leftWall.paint(g2);
        rightWall.paint(g2);

        // Paints 2 Balls (separate paint method created in ball class)
        b.paint(g2);
        b2.paint(g2);

        // Paints Paddle (separate paint method created in paddle class)
        paddle.paint(g2);

        // Paints Bricks based on current level (separate paint method created in brick class)
        // Bricks were created/stored in 2D Array, so drawn on screen through 2D Array as well. 
        if (level == 1) {
            for (int x = 0; x < bricks.length; x++) {
                for (int i = 0; i < bricks[0].length; i++) {
                    bricks[x][i].paint(g2);
                }
            }
        }
        if (level == 2) {
            for (int x = 0; x < bricks.length; x++) {
                for (int i = 0; i < bricks[0].length; i++) {
                    bricks[x][i].paint(g2);
                }
            }
        }


    }

Вот пример метода рисования в классе Paddle:

// Constructor
 public Paddle(int x, int y, int w, int h){

        xpos = x;
        ypos = y;
        width = w;
        height = h;

        r = new Rectangle(xpos, ypos, width, height);
    }

public void paint(Graphics2D g2){

        g2.fill(r);
    }

Вывод (что показано на экране):

enter image description here

Надеюсь, это поможет вам нарисовать ваш круг!

...