Java框架大小本身错误

时间:2012-02-23 08:08:31

标签: java graphics awt frame

我正在制作2D游戏并绘制到框架内的表面。问题是这样,我循环遍历背景并绘制背景图像(使用图像平铺),结果如下:

注意:我将帧设置为640,480

enter image description here

正如你可以看到顶部和左侧偏离几个像素,我主要担心顶部...

我正在使用此代码初始化框架:

    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);

        }
    }

我原本以为它会正常工作,但显然不是......

我做错了什么,或者我该如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:3)

首先,你应该使用swing而不是旧的awt(但原理是相同的)。


框架从左上角开始,包括边框。向框架添加一个组件并覆盖该组件方法上的paintComponent以获得正确的起始坐标。


这是一个完整的例子:

enter image description here

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,然后开始绘制这些点。