1

私は Java の初心者で、2D ゲームを作成することにしました。パネルをペイントしようとしていますが、うまくいきません。私は JFrames で同じタイプのことを行いましたが、うまくいきましたが、可能であれば JPanels で動作させたいと思っています。ここにいくつかのコードがあります

これは、マップを描画するためだけに使用されるクラスです。画像は列挙から呼び出されます

   //called in paint method for panel
public void draw(Graphics2D g2){
    sLevel1.setupRect();
    for(int i = 0; i < 24; i++){
        for(int e = 0; i < 24; i++){
            if(level1.worldDat[i][e] != 0){
                int c = level1.worldDat[i][e];
                if(i == 1){
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.GRASS1.getPath()), e*20, i*20, null);
                }else if(i == 2){
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.GRASS2.getPath()), e*20, i*20, null);
                }else if(i == 3){
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.GRASS3.getPath()), e*20, i*20, null);
                }else if(i == 5){
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.BORDER.getPath()), e*20, i*20, null);
                }else{
                    g2.drawImage(Toolkit.getDefaultToolkit().getImage(eBlocks.NULL.getPath()), e*20, i*20, null);
                }
            }
        }
    }

}

これは、パネルで呼び出される場所です。

    @Override
public void paintComponent(Graphics g){     
    Graphics2D g2 = (Graphics2D) g;
    super.paintComponent(g2);
    worldDraw.draw(g2);
}

そして最後に、これがJFrameに追加され、タイマーが再描画に使用される場所です

    public mainGameFrame() {
    super("Tile Game");
    setResizable(false);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 510, 525);

    //i also tried add, didnt work either
    setContentPane(gamePanel);

    addKeyListener(this);

    Timer time = new Timer(32, new ActionListener(){
        public void actionPerformed(ActionEvent e){
            repaint();
            gamePanel.repaint();
        }
    });

    time.start();
}
4

1 に答える 1