我开始用Java编程,我想制作一个小项目,这是一个带有基本输入的平台2D游戏。 我希望游戏能够根据玩家的监视器来扩展其分辨率,但为了做到这一点,我需要绘制游戏视图的大小调整版本。 主要的问题是,在我的游戏模型中,我使用绝对坐标将项目放置在游戏世界中,因此我不希望我的坐标在缩放版本中发生变化。 经过一些研究后,我决定使用BufferedImage和drawImage()方法扩展我的游戏。
当我尝试将我的背景从我的模型的坐标缩放到播放器的屏幕时,问题开始出现,背景图像被裁剪,我失去了背景的底部。
这是我尝试缩放图像的部分:
final private int modelX = 480;
final private int modelY = 560;
final private int screenX;
final private int screenY;
public class Board extends JPanel{
Board(){
Dimension s = Toolkit.getDefaultToolkit().getScreenSize();
this.screenX = s.getWidth/4;
this.screenY = s.getHeigth/2;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon background = new ImageIcon("background.png");
//I create a new bufferedImage, the size of my game model.
BufferedImage canvas = new BufferedImage(modelX,modelY,BufferedImage.TYPE_INT_ARGB);
Graphics canvasGraphics = buffer.getGraphics();
//I fill the whole canvas with my scaled background picture
canvasGraphics.drawImage(background.getImage(),0,0,canvas.getWidth,canvas.getHeight,null)
Graphics2D g2d = (Graphics2D) g;
//Finally, I fill my screen with my canvas
g2d.drawImage(canvas,0,0,screenX,screenY,null);
}
}