1

少し難あり。コードを見てください:

1 クラス (MyCanvas.java)

package Game;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JComponent;
import javax.swing.JFrame;

class MyCanvas extends JComponent {

    private static final long serialVersionUID = 1L;

    private static final int WIDTH = 490;
    private static final int HEIGHT = 470;
    public static InputKey input = new InputKey();
    private int x = 10;
    private int y = 10;

    // public MyCanvas() {
    // addKeyListener(input);
    // }

    public void move() {
        if (x == 0) {
            x = 10;
        }
        if (y == 0) {
            y = 10;
        }

        if (input.left) {
            x--;
        }
        if (input.right) {
            x++;
        }
    }

    public void paint(Graphics g) {
        Image img1 = Toolkit.getDefaultToolkit().getImage(
                "C:\\Users\\дНМ\\workspace\\Game\\image\\Peopl.png");

        int width = img1.getWidth(this);
        int height = img1.getHeight(this);

        int scale = 4;
        int w = scale * width;
        int h = scale * height;
        g.drawImage(img1, x, y, (int) w, (int) h, this);

    }

    public static void main(String[] a) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH, HEIGHT);
        frame.getContentPane().add(new MyCanvas());
        frame.getContentPane().setBackground(Color.BLACK);
        frame.setVisible(true);
        frame.setFocusable(true);
        frame.requestFocusInWindow();
        frame.addKeyListener(input);
    }

}

2 番目のクラス (InputKey.java)

package Game;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JComponent;

public class InputKey extends JComponent implements KeyListener {

    private static final long serialVersionUID = 1L;

    public boolean left;
    public boolean right;

    public  MyCanvas cv;

    void FBool() {
        left = right = false;
    }

    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            left = true;
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            right = true;
        }
        cv.move();
        repaint();
    }

    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            left = false;
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            right = false;
        }
        //cv.move();
        //repaint();
    }

    public void keyTyped(KeyEvent e) {
        // bla...bla..bla
    }
}

ファースト クラスは完全に機能し、額縁も表示されます。しかし、ボタン (左矢印または右矢印) を押すと、エラーが発生します。

 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Game.InputKey.keyPressed(InputKey.java:28)
    at java.awt.Component.processKeyEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Window.processEvent(Unknown Source)

機能させるためにコードで何を修正すればよいか教えてください)

よろしくお願いします、悪いデザインでごめんなさい。

UPD

まだ少し簡単にはわかりませんが、そうではないと思います。誰かが問題の解決策を書いてくれたら - 私は幸せです)

4

1 に答える 1