1

私は Java で何か新しく、やや難しいことを学んでいます。それはグラフィックスです。以下に、2 つのクラスの機能について説明します。私の新しい障害は、Z を押すだけで、ボールから出てくる別のイメージ (つまり、レーザーのような発射体) を描画する方法を考え出すことです。

問題は、たとえば、「g.drawImage(laser,laser_dx,laser_dy,this) in the if statement that contains "KeyEvent.VK_Z"」というメソッドを記述した場合、keyPressed メソッドで突然「このメソッドはローカルで使用されていません」と表示されることです。そのような障害を解決するための私のアプローチは何ですか?

これまでに行ったことは、プログラムのすべてのキーボード イベントを含む "GameBoard" クラス内にネストされたクラスを作成することです。

       private class Adapter extends KeyAdapter
       {

                public void keyPressed(KeyEvent e)
            {
                int keyCode = e.getKeyCode();
                if(keyCode == KeyEvent.VK_RIGHT)
                {
                    ball_dx += ball_velocity;

                }
                if(keyCode == KeyEvent.VK_LEFT)
                {
                    ball_dx -= ball_velocity;
                }
                if(keyCode == KeyEvent.VK_Z){

                }

            }

        }

「Gameboard」と呼ばれる別のクラスの描画グラフィックス メソッドは次のとおりです。このクラスは、緑色のボールの画像 (.png 画像) を描画するだけで、矢印キーで左右に移動できます。

    public class GameBoard extends JPanel implements ActionListener
    {

        public void paintComponent(Graphics g)
            {

            super.paintComponent(g);

            g.drawImage(ball, ball_dx, ball_dy, this);

            Toolkit.getDefaultToolkit().sync();

        }

        public void actionPerformed(ActionEvent arg0) 
        {

            repaint();
        }

    }
4

1 に答える 1

3

ロジックを再考する必要があります。重要なイベントを処理するコードとすべてを描画するコードは、状態を共有する必要があります。

  • イベントは状態を設定します
  • 状態によって絵柄が変わる

簡単にしてアイデアを提供するために:

boolean isLaser = false;

public void keyPressed(KeyEvent e) {
  isLaser = true;
}

public void keyReleased(KeyEvent e) {
  isLaser = false;
}

public void paintComponent(Graphics g) {
  if (isLaser)
    // do something
}

もちろん、より複雑な環境では、次のようなより構造化されたソリューションがあります

List<Entity> entities = new ArrayList<Entity>();

public void paintComponent(Graphics g) {
  for (Entity e : entities)
    e.draw(g);
}

public void keyPressed() {
  entities.add(new LaserEntity(...));
}
于 2013-01-05T03:10:20.890 に答える