我正在制作2D游戏并绘制到框架内的表面。问题是这样,我循环遍历背景并绘制背景图像(使用图像平铺),结果如下:
注意:我将帧设置为640,480
正如你可以看到顶部和左侧偏离几个像素,我主要担心顶部...
我正在使用此代码初始化框架:
frame = new Frame(_title);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.addMouseListener(new Mouse());
frame.addKeyListener(new Keyboard());
frame.setSize(new Dimension(width, height));
frame.setResizable(false);
frame.setBackground(Color.lightGray);
frame.setVisible(true);
frame.createBufferStrategy(2);
以下是我绘制背景的方式:
for(int x = 0; x < GameClient.width; x+= 32) {
for(int y= 0; y< GameClient.height; y+= 32) {
g.drawImage(floor, x , y, null);
}
}
我原本以为它会正常工作,但显然不是......
我做错了什么,或者我该如何解决这个问题?
感谢。
答案 0 :(得分:3)
首先,你应该使用swing而不是旧的awt(但原理是相同的)。
框架从左上角开始,包括边框。向框架添加一个组件并覆盖该组件方法上的paintComponent
以获得正确的起始坐标。
这是一个完整的例子:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.add(new JComponent() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GRAY);
for (int x = 0; x < getWidth(); x += 32)
for (int y = 0; y < getHeight(); y += 32)
g.fill3DRect(x+1, y+1, 30, 30, true);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setVisible(true);
}
答案 1 :(得分:1)
无论哪种方式,都可以使用frame.getInsets.top()
,frame.getInsets().left
,然后开始绘制这些点。