亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

繪制圖像 2D 圖形

繪制圖像 2D 圖形

慕婉清6462132 2022-01-19 17:15:17
我正在用java做一個游戲,但我沒有放圖像,我已經嘗試通過“drawimage”放它,但它不能正常工作=(我不知道哪里是保存圖像的最佳位置以及如何保存成為調用圖像的最佳方法。    public void paint(Graphics2D g2){    g2.setColor(getRandomColor());    g2.fillOval((int)x, (int)y, (int)diametro, (int)diametro);}`這段代碼來自我的班級小行星它們是一個圓圈(因為我要測試與圓圈的碰撞)。謝謝
查看完整描述

2 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

我很確定您的意思是要在面板上繪制圖像。首先,我建議您在項目 src 文件夾中創建一個資源文件夾,并在那里添加所有圖像。完成后,您必須使用 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);

    }

}


查看完整回答
反對 回復 2022-01-19
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

為了在 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,您實際上無法在屏幕上以圖形方式顯示任何內容)。


下面是取自我的 Atari Breakout 迷你游戲的 Board.java 的示例:


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 類中的 Paint 方法的示例:


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

    }

輸出(屏幕上顯示的內容):

查看完整回答
反對 回復 2022-01-19
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號