Я делаю Java-игру для своего финального проекта. У меня есть базовый класс. Я хочу, чтобы это было, когда я нажимаю escape, он вызывает меню паузы, и если я снова его нажму, он выйдет из программы. Это код, который у меня есть.Двойное нажатие клавиши в Java
package Pong;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
import java.util.*;
public class Pong implements ActionListener, KeyListener
{
public static Pong pong;
public int width = 1300, height = 750;
public RenderingClass renderer;
int balls;
int gameStart = 0;
public Paddles paddle1, paddle2;
public Ball ball1;
public boolean w, s, up, down;
public int time = 0;
public Pong()
{
JFrame frame = new JFrame("Extreme Pong: Final Game");
Timer timer = new Timer(time, this);
renderer = new RenderingClass();
frame.setSize(width + 15, height);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(this);
frame.add(renderer);
start();
timer.start();
}
public void start()
{
paddle1 = new Paddles(this, 1);
paddle2 = new Paddles(this, 2);
ball1 = new Ball(this, 1);
}
public void update()
{
if(w)
{
paddle1.move(true);
}
if(s)
{
paddle1.move(false);
}
if(up)
{
paddle2.move(true);
}
if(down)
{
paddle2.move(false);
}
}
public void render(Graphics2D page)
{
page.setColor(Color.BLACK);
page.fillRect(0, 0, width, height);
page.setColor(Color.WHITE);
if(gameStart == 0)
{
page.setFont(new Font("3 by 5 Regular", 1, 50));
page.drawString("PONG 2.0", width/2 - 50, 50);
}
else if(gameStart == 1)
{
page.setFont(new Font("3 by 5 Regular", 1, 50));
page.drawString("GAME PAUSED", width/2 - 120, height/2);
}
else if(gameStart == 2)
{
page.setColor(Color.WHITE);
page.setStroke(new BasicStroke(5));
page.drawLine(width/2, 5, width/2, height);
page.setFont(new Font("3 by 5 Regular", 1, 100));
page.drawString(Integer.toString(0), width/3, 75);
page.drawString(Integer.toString(0), width/3 * 2 - 60, 75);
paddle1.render(page);
paddle2.render(page);
ball1.render(page);
}
}
public void actionPerformed(ActionEvent event)
{
if(gameStart == 2)
{
update();
}
renderer.repaint();
update();
}
public static void main(String[] args)
{
pong = new Pong();
}
public void keyPressed(KeyEvent event)
{
int source = event.getKeyCode();
if(source == KeyEvent.VK_W)
{
w = true;
}
else if(source == KeyEvent.VK_S)
{
s = true;
}
else if(source == KeyEvent.VK_UP)
{
up = true;
}
else if(source == KeyEvent.VK_DOWN)
{
down = true;
}
else if(source == KeyEvent.VK_SPACE)
{
gameStart = 2;
}
else if(source == KeyEvent.VK_ESCAPE) !!!!!!!!!!
{
gameStart = 1;
if(source == KeyEvent.VK_ESCAPE)
{
System.exit(1);
}
}
}
public void keyReleased(KeyEvent event)
{
int source = event.getKeyCode();
if(source == KeyEvent.VK_W)
{
w = false;
}
else if(source == KeyEvent.VK_S)
{
s = false;
}
else if(source == KeyEvent.VK_UP)
{
up = false;
}
else if(source == KeyEvent.VK_DOWN)
{
down = false;
}
}
public void keyTyped(KeyEvent event)
{
}
}
С помощью этого кода он выходит на первую прессе, но я хочу, чтобы выйти на втором прессе. Спасибо.
Этот код не работает, как виртуальная машина не остановится, когда в вашем методе Keypressed и ждать, пока вы попали ESC во второй раз. :-) Вы можете добавить переменную состояния и проверить и установить ее, когда нажата клавиша ESC. – Frank