gpt4 book ai didi

java - KeyListener 不会更改变量

转载 作者:行者123 更新时间:2023-12-02 09:03:37 25 4
gpt4 key购买 nike

我一直在研究这个蛇项目,但并不真正理解为什么键监听器实际上没有更改变量 char 键。我还有一些其他的按键监听器示例,它们都工作正常,但由于某种原因我的无法工作。一些帮助将不胜感激。非常感谢您的帮助。

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.RepaintManager;

public class Main extends JPanel implements Runnable {

/*
*
* SIZE OF BOARD
*
*/

static GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
static GraphicsDevice[] gs = ge.getScreenDevices();

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

private static final int DIM_WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
private static final int DIM_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;

static JFrame frame = new JFrame();
static JPanel panel = new JPanel();
static Snake s = new Snake();
static Main main = new Main();
KeyListener listener = new Snake();
boolean black = true;

public Main() {
addKeyListener(listener);

}


@SuppressWarnings("deprecation")
public static void main(String[] args) {

//gs[0].setFullScreenWindow(frame);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setCursor(Cursor.CROSSHAIR_CURSOR);
frame.setSize(DIM_WIDTH, DIM_HEIGHT);
frame.add(main);
frame.setVisible(true);

(new Thread(new Main())).start();

}

// paints the panel
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;

/*
* Snake
*/

//Redraws Background
g2d.setColor(Color.black);
g2d.fillRect(0, 0, (int) screenSize.getWidth(), (int) screenSize.getHeight());

//Draws Border
g2d.setColor(Color.white);
g2d.fillRect(0,0, (int)screenSize.getWidth(), 1);
g2d.fillRect(0,0, 1, (int)screenSize.getHeight());
g2d.fillRect((int)screenSize.getWidth()-1, 1, 1, (int)screenSize.getHeight());
g2d.fillRect(0, (int)screenSize.getHeight()-86, (int)screenSize.getWidth(), 10);

//Draws Snake head
g2d.setColor(s.getColor());
g2d.fillRect(s.getX(), s.getY(), 30, 30);

}
// Creates Frame, and starts the game

@Override
public void run() {

while (!s.getIsDead()) {
move();
}

}
public void move() {

s.move();
s.death();
main.repaint();
try {
Thread.sleep(300);
} catch (InterruptedException e) {

e.printStackTrace();
}
if (Thread.interrupted()) {
return;
}

}

}



import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


public class Snake implements KeyListener {

Color c = Color.green;

//Starting position of Snake
int x = 50;
int y = 50;
char key;
boolean dead = false;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();






public void move() {
x++;


}

public void death() {

if (x + 30 >= screenSize.getWidth() || y + 115 >= screenSize.getHeight() || y<=0 || x<=0) {
c = Color.red;
dead = true;

}
}

public int getX() {
return x;
}

public int getY() {
return y;
}

public Color getColor() {
return c;

}

public boolean getIsDead() {
return dead;
}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent e) {
key = 'w';


}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}




}

最佳答案

将构造函数更改为

public Main() {
addKeyListener(listener);
setFocusable(true);
requestFocus();
}

但是看看这个问题,你不应该使用KeyListeners。 java keylistener not called

关于java - KeyListener 不会更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59993212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com