import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
// Класс окна, в котором размещено игровое поле
class okno extends JFrame
{
private pole gameP; // Закрытая Переменная класса - игровое поле
// Обработчик событий нажатий на клавиши
private class myKey implements KeyListener
{
// Метод, который срабатывает при нажатии
public void keyPressed(KeyEvent e)
{
// Получение кода нажатой клавиши
int key_ = e.getKeyCode();
else if ((key_==39)&(key_==16)) // 39 - вправо 16 - шифт
{
gameP.y += 30;
gameP.x += 30;
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}
}
Не получается пустить объект по диагонали при нажатии shift и стрелки вправо, в чем ошибка?
Проблема в том, что keyPressed обрабатывает только одно нажатие, т.е. (key_==39)&(key_==16) всегда ложно, так как оно либо 39, либо 16, либо любой другой код, но не два и более одновременно. Вам необходимо фиксировать нажатые клавиши в структуре.
private class myKey implements KeyListener
{
private final Set<Integer> activeKeys = new HashSet<Character>();
private final List<Integer> keyCodes = List.of(16,39);
@Override
public synchronized void keyPressed(KeyEvent e) {
activeKeys.add(e.getKeyCode());
if (activeKeys.size() > 1 && keyCodes.stream().allMatch(k->set.contains(k))) {
gameP.y += 30;
gameP.x += 30;
}
}
@Override
public synchronized void keyReleased(KeyEvent e) {
activeKeys.remove(e.getKeyCode());
}
@Override
public void keyTyped(KeyEvent e) {}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости