在我开始明白之前:我对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();
}
}
现在我明显意识到这个程序基本上没有实现,但我想到如果我甚至不能显示任何图片,那么开始实现的重点是什么?
我的问题是我无法弄清楚为什么没有显示.jpgs。创建paint();
和JFrame
时,是否应该调用JPanel
方法?代码非常混乱,但我认为最好包含所有代码。
如果这很重要,这最终将成为一个类似口袋妖怪的游戏,其中运行窗口由许多16x16像素的正方形组成,玩家可以四处移动。在开始之前,我想尝试在随机位置输出一些图像。我一直在阅读类似的问题并查看示例,我只是阅读了一段关于图形的Java文本但只能找到有关加载图像的信息,而不是通过绘图显示。如果有人可以帮助我甚至以正确的方式指出我,我将不胜感激。 (我意识到我很可能完全需要重新启动,而且事情完全错了,但你能做的任何事都会有所帮助。)
答案 0 :(得分:6)
我刚刚阅读了大量关于图形的Java文本,但只能找到有关加载图像的信息,而不是通过绘图显示。
对于口袋妖怪风格的游戏,我认为每个图标/图像使用JLabel
都不会带来任何好处。相反:
BufferedImage
。Image
个实例(字符,地形中的元素等)&amp;将它们绘制到主Graphics
1 的BufferedImage
实例。JLabel
并将其添加到JPanel
,然后致电label.repaint()
。Graphics
的{{1}}方法提供的paintComponent()
实例。最后一部分,我建议选项1。
JComponent
public void gameRenderLoop() {
Graphics2D g2 = gameImage.createGraphics();
g2.drawImage(playerImage, 22, 35, this);
...
g2.dispose();
}
&amp; BufferedImage
Graphics
),显示image painting with transparency。
答案 1 :(得分:4)