gpt4 book ai didi

java - KeyListener 不起作用

转载 作者:行者123 更新时间:2023-11-29 05:45:52 26 4
gpt4 key购买 nike

<分区>

我正在编写类似炸弹人的游戏,但我的 KeyListener 有问题。

问题是,当游戏运行时,KeyListener 没有响应,但当它不运行时,它会按照我告诉他的去做。

这是我的代码

public class direction extends Canvas implements KeyListener {

static float bmx = 35;
static float bmy = 35;
static float v = 0.03f;

public static BufferStrategy strategie;
public static BufferedImage image;

public direction() { //pas sûr de ce que ça fait
GraphicsEnvironment ge = //on m'a dit de le mettre
GraphicsEnvironment.getLocalGraphicsEnvironment(); //le programme marche très bien sans
GraphicsDevice gd = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gd.getDefaultConfiguration();
image = gc.createCompatibleImage(700, 700);
setSize(700, 700);

}

static boolean gauche;
static boolean droite;
static boolean haut;
static boolean bas;


public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_LEFT) {
gauche = true;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
droite = true;
System.out.println("lal");
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
bas = true;
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
haut = true;
}
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
gauche = false;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
droite = false;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
bas = false;
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
haut = false;
}
}
public void keyTyped(KeyEvent e) {
}


public static void draw(){

Graphics2D g = (Graphics2D) strategie.getDrawGraphics();

for(int ligne= 0 ; ligne < board.gridHauteur; ligne++){
for(int colonne= 0 ; colonne < board.gridLargeur ; colonne++){

switch (board.plateau1[ligne][colonne]) {
case 0 : g.setColor(Color.lightGray);
g.fillRect( 30*ligne, 30*colonne , 30, 30);
break;
case 1 : g.setColor(Color.black); //dessine et donne la propriété 'BLOCKED' à certains bloques
g.fillRect( 30*ligne, 30*colonne , 30, 30);
board.plateau1[ligne][colonne] = board.BLOCKED;
break;
case 2 : g.setColor(Color.darkGray);
g.fillRect( 30*ligne, 30*colonne , 30, 30);
board.plateau1[ligne][colonne] = board.BLOCKED;
break;
}
}
}
g.setColor(Color.red);
g.fillRect((int)bmx, (int)bmy, 20, 20); //dessine le "joueur"
strategie.show();
}

public static void run() {

long dernierTempsLoop = System.currentTimeMillis(); // avec cette ligne, nous demandons un t0

while(true) {

long delta = (System.currentTimeMillis() - dernierTempsLoop); // puis, à chaque nouvel boucle
dernierTempsLoop = System.currentTimeMillis(); //nous calculons le temps que la
//boucle à mise pour s'effectuer

for (int i=0;i<delta / 5;i++) {
logic(5); //permet d'appeler à ce qu'il y ait peu de mouvements si la boucle est rapide
} // et plus de mouvements si elle est plus lente ce qui garantit une vitesse constante
// quelle que soit le temps que la boucle met pour s'effectuer
if ((delta % 5) != 0) {
logic(delta % 5);
}

draw(); //dessine le terrain et le rectangle

try { Thread.sleep(10); } catch (Exception e) {}; //permet au programme de ne pas "surchauffer"
}

}

然后

public board()
{
super("Bomberman");
setSize(fenLargeur,fenHauteur);
g = new direction();
g.setFocusable(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setBackground(Color.BLACK);

JPanel content = new JPanel();
content.setLayout(new BorderLayout());
content.add(g, BorderLayout.CENTER);
g.addKeyListener(g); // <=== c'est CA qui me pose problème
setContentPane(content);
setVisible(true);


g.createBufferStrategy(2);
Bm.direction.strategie = g.getBufferStrategy();

}`

和...

dispose();
board b = new board();
b.g.createBufferStrategy(2);
direction.strategie = b.g.getBufferStrategy();

direction.run();

希望我能理解,感谢您的阅读。

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