簡體   English   中英

繪制和重繪以及 JFrame/JPanel 創建

[英]Paint and repaint and JFrame/JPanel creation

在我開始之前知道這一點:我對 Java 和編程非常陌生。 我如何正確地將“grass.jpg”繪制到屏幕上?

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import java.util.Random;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Game extends Canvas {
private static int Height = 300, Width = 600;  //25x50
private Random generator = new Random();

private String[][] TerrainList = new String[12][12];



public void GameSetup() {
    JFrame container = new JFrame("CARSSémon");

// get hold the content of the frame and set up the resolution of the game
JPanel panel = (JPanel) container.getContentPane();
panel.setPreferredSize(new Dimension(Width,Height));
//panel.setLayout(null);

    //setBounds(0,0,800,600);
//panel.add(this);

// finally make the window visible
container.pack();
container.setResizable(false);
container.setVisible(true);
    container.setLocationRelativeTo(null);  //Centers screen

    container.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
    });


    PrepareTerrain();
    PreparePlayer();

}

public void PrepareTerrain() {

  for (int a=0; a<=11; a++){
   for (int b=0; b<=11; b++){
      TerrainList[a][b]="grass";   //Sets defult terrain of grass
   }
  }

  int BushLocationx = generator.nextInt(12);
  int BushLocationy = generator.nextInt(12);

  BushCheck(BushLocationx,BushLocationy);  //Checks to see if it can make bushs at the location

}

@Override
public void paint(Graphics g) {
super.paint(g);
// Draw an Image object
Image grass = new ImageIcon("grass.jpg").getImage();
Image bushes = Toolkit.getDefaultToolkit().getImage("bushes.jpg");
g.setColor(Color.BLACK);
g.drawImage(grass, 0, 0, null);
g.drawImage(grass, 0, 50, null);
g.drawImage(grass, 50, 0, null);
g.drawImage(grass, 200, 200, null);
}

public void DrawTerrain() {

  for (int r=0; r<=11; r++){
   for (int c=0; c<=11; c++){

   }
  }
}

private void BushCheck(int x, int y){

}

public void PreparePlayer() {

}

public static void main(String[] args) {

    Game G =new Game();
    G.GameSetup();

}

}

現在我顯然意識到這個程序基本上沒有實現任何東西,但我想如果我永遠無法顯示任何圖片,那么開始實現東西有什么意義呢?

我的問題是我不明白為什么沒有顯示 .jpg。 不應該paint(); 創建JFrameJPanel時調用方法? 代碼非常混亂,但我認為最好包含所有代碼。

萬一這很重要,這最終將成為一個類似口袋妖怪的游戲,其中運行 window 由許多 16x16 像素方塊組成,玩家可以在這些方塊上移動。 在開始之前,我想嘗試在隨機位置輸出一些圖像。 我一直在閱讀類似的問題並查看示例,我剛剛閱讀了一段關於圖形的 Java 文本,但只能找到有關加載圖像的信息,而不是通過繪畫顯示。 如果有人能以正確的方式指出我的幫助,我將不勝感激。 (我意識到我很可能完全需要重新啟動,並且正在做完全錯誤的事情,但你能做的任何事情都會有所幫助。)

我剛剛閱讀了大量關於圖形的 Java 文本,但只能找到有關加載圖像的信息,而不是通過繪畫顯示。

對於口袋妖怪風格的游戲,我認為為每個圖標/圖像使用JLabel不會帶來任何好處。 反而:

  • 創建游戲區域所需大小的BufferedImage
  • 為您可能需要繪制的每個較小圖標(字符、地形中的元素等)獲取Image實例,並將它們繪制到主BufferedImage 1Graphics實例。
  • 要顯示主要的“游戲”圖像,有兩個不錯的選擇:
    1. 將主圖像添加到JLabel並將其添加到JPanel ,調用label.repaint()
    2. 將游戲圖像直接繪制到提供給JComponentpaintComponent()方法的Graphics實例。

對於最后一部分,我會推薦選項 1。

1. 乙肝

public void gameRenderLoop() {
    Graphics2D g2 = gameImage.createGraphics();
    g2.drawImage(playerImage, 22, 35, this);
    ...
    g2.dispose();
}

處理BufferedImage & Graphics的例子

  1. 繪制圖像的非常簡單的示例。
  2. 處理文本和剪輯的更復雜的示例。
  3. 一種略有不同的方法(擴展JLabel )顯示具有透明度的圖像繪制

不要重新發明輪子。 使用帶有ImageIconJLabel為您繪制圖像。 只需將它添加到JPanel即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM