我试图在我正在制作的游戏中添加一个小burger.jpg img。只要在Switch中传递'f'(食物),就应该添加汉堡。我在我的代码中实现这个问题。
我原本只填充橙色矩形g2.fillRect()
,但我想用实际图像替换它。我已经尝试缩放图像并添加它但它没有显示出来。如果我在for循环结束时替换g2.fillRect
,它会使每个方格成为汉堡,而不仅仅是'f'
我该怎么做?
private class Game extends JPanel {
BufferedImage img = null;
@Override
public void paintComponent(Graphics g2) {
super.paintComponent(g2);
try {
img = ImageIO.read(new File("src/burger.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
BufferedImage otherImage = new BufferedImage(50, 50,
BufferedImage.TYPE_INT_RGB);
Graphics g = otherImage.createGraphics();
int width = getWidth() / game.getBoardWidth();
int height = getHeight() / game.getBoardHeight();
char[] symbols = game.toString().toCharArray();
int x = 0;
int y = 0;
for (char c : symbols) {
switch (c) {
case 'Q':
g2.setColor(Color.BLACK);
break;
case 'H':
g2.setColor(Color.GREEN);
break;
case 'f':
//g2.setColor(Color.ORANGE);
g2.drawImage(img, x, y, width, height, null);
break;
case '-':
g2.setColor(Color.WHITE);
break;
case '\n':
y += height;
x = 0;
}
//g2.drawImage(img, x, y, width, height, null);
g2.fillRect(x, y, width, height);
x += width;
}
}
}
答案 0 :(得分:3)
尚未测试,但现在正在您的计划中发生这种情况:
'f'
)然后drawImage
然后fillRect
你想要的是:
'f'
),然后drawImage
,否则fillRect
所以你比较一下:
if (symbol == 'f') {
g2.drawImage(img, x, y, width, height, null);
} else {
g2.fillRect(x, y, width, height);
}
或者我要做的是:
switch (c) {
case 'Q':
g2.setColor(Color.BLACK);
g2.fillRect(x, y, width, height);
break;
case 'H':
g2.setColor(Color.GREEN);
g2.fillRect(x, y, width, height);
break;
case 'f':
//g2.setColor(Color.ORANGE);
g2.drawImage(img, x, y, width, height, null);
break;
case '-':
g2.setColor(Color.WHITE);
g2.fillRect(x, y, width, height);
break;
case '\n':
y += height;
x = 0;
}
注释掉或删除最后一次致电:
g2.fillRect(x, y, width, height);
try {
img = ImageIO.read(new File("src/burger.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
这些行应该在构造函数中,而不是在paintComponent
方法中,它会被Swing多次调用,这样做可能会减慢或阻止/冻结应用程序,直到它完成读取。
另外,您没有使用otherImage
变量,因此您也可以将其删除...