0

2D サイド スクローラーを作成したかったので、オンラインでチュートリアルを行っていましたが、この正確なエラーが発生しました。私はそれをグーグルで検索しましたが、何も思いつきませんでした。タイプミスを探してみましたが、きれいに見えます。コード内でエラーが発生することはありません。どこから始めればよいかわかりません。エラーの内容とその修正方法を説明していただければ、それは素晴らしいことです。

    package Main;


import GameState.GameStateManager;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;

public class GamePanel extends JPanel implements Runnable, KeyListener{
    public static final int WIDTH = 320;
    public static final int HIGHT = 240;
    public static final int SCALE = 2;

    //game thread

    private Thread thread;
    private boolean running;
    private int FPS = 60;
    private long targetTime = 1000/FPS;
    //image        
    private BufferedImage image;
    private Graphics2D g;

    //game state manager
    private GameStateManager gsm;




    public GamePanel(){
        super();
        setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
        setFocusable(true);
        requestFocus();
    }
    public void addNotify(){
        super.addNotify();
        if (thread == null) {
            thread = new Thread(this);
            addKeyListener(this);
            thread.start();
        }
    }   
    private void init() {
        image = new BufferedImage(WIDTH, HIGHT, BufferedImage.TYPE_INT_RGB);     
        g = (Graphics2D) image.getGraphics();
        running = true;
        gsm = new GameStateManager();

    }

        public void run(){
        init();
        long start, elapsed, wait;

        //game loop
          while(running) {

            start = System.nanoTime();
            update();
            draw();
            drawToScreen();
               elapsed = System.nanoTime() - start;

               wait = targetTime - elapsed / 1000000;

               try
               {
                   Thread.sleep(wait);
               }
               catch(Exception e) 
               {
                   e.printStackTrace();
               }//end of try catch
          }







        }
        private void update()
        {
            gsm.update();
        }
        private void draw()
        {
            gsm.draw(g);
        }
        private void drawToScreen()
        {
            Graphics g2 = getGraphics();
            g2.drawImage(image, 0, 0, null);
            g2.dispose();


        }




        public void KeyPressed(KeyEvent key) 
        {
         gsm.keyPressed(key.getKeyCode());
        }
        public void KeyReleased(KeyEvent key) 
        {
         gsm.keyReleased(key.getKeyCode());
        }




    }
4

2 に答える 2

3

コンパイラのエラー メッセージは、何が間違っているかを正確に示しています。クラスは KeyListener インターフェイスを実装していますが、インターフェイスの必要なすべてのメソッドを実装していません。解決策: KeyListener API に従って、必要なすべてのメソッドを必ず実装してください。また、@Overrideアノテーションを使用して、オーバーライドが正しいことを確認してください。

そうは言っても、 Swing アプリケーションでのほとんどのキーボード入力には KeyListeners を使用しないことをお勧めします。これは低レベルのリスナーであり、キー バインディングなどの高レベルの構造を優先して避ける必要があります。また、Swing GUI ではupdate(...)メソッドのオーバーライドを使用しないようにする必要があります。

于 2013-09-03T03:36:03.170 に答える
0

メソッド KeyReleased(KeyEvent key)は、 のように小文字の「k」で開始する必要がありkeyReleased(KeyEvent key)ます。Java では大文字と小文字が区別されます。

KeyListener インターフェイスの他のメソッドをオーバーライドする必要がある場合もあります。

また、スーパー メソッドをオーバーライドする場合は、@Override アノテーション (@Hovercraft Full Of Eels で提案) をメソッドに追加します。そうすれば、IDE はコーディング中にヒントを提供します。

于 2013-09-03T04:00:45.313 に答える