1

所以我面临着一个我已经坚持了一个小时的情况。

这是我的情况:我想添加一个显示“生活:”的图像,与我的游戏画布分开,非常类似于 NES 的这款游戏《塞尔达传说》。

例子

问题是:我的代码仍然只显示我的游戏画布。

public class Game extends Canvas {

           private Game(){

           JFrame container = new JFrame("Arcade Shooter Clone");

            panel = (JPanel)container.getContentPane();
            panel.setLayout(new BorderLayout());

            panel.add(this,BorderLayout.CENTER);

            ShipLifeTitle shipLifeTitle = new ShipLifeTitle();
            panel.add(shipLifeTitle,BorderLayout.SOUTH);
           }

    }

    public class ShipLifeTitle extends Sprite {

        private Image image;

        public ShipLifeTitle()
        {
            try
            {
                image = ImageIO.read(new File("src/Ship/shipLifeTitle.PNG"));


            }
            catch(IOException e)
            {
                e.printStackTrace();
            }

        }

        @Override
        public void draw(Graphics g) {
            // TODO Auto-generated method stub
            g.drawImage(image, 200, 200, null);
        }


    }

    public class Sprite extends Component implements GameComponent {

        public Vector2D position;
        public Vector2D velocity;

        @Override
        public void update(long milliseconds) {
            // TODO Auto-generated method stub

        }

        @Override
        public void draw(Graphics g) {
            // TODO Auto-generated method stub

        }



    }
4

1 回答 1

1

在您ShipLifeTitle的面板中,您需要覆盖其getPreferredSize方法。

public class ShipLifeTitle extends Sprite {
    //...
    public Dimension getPreferredSize() {
        return new Dimension(image.getWidth(null), image.getHeight(null));
    }
}

这将为BorderLayout您希望面板的布局方式提供一些提示

于 2013-02-09T01:34:23.373 回答