Почему не реагирует на нажатие клавиш?
Я уже миллион статей перечитал, вроде всё нормально должно быть.
Да код не очень, но суть вопроса в KeyListener
.
public Game() {
setBackground(Color.BLUE);
initgame();
loadimage();
addKeyListener(new FieldKeyListener());
setFocusable(true);
requestFocus();
}
public void initgame(){
this.x=160;
this.y=610;
timer= new Timer(50, this);
timer.start();
createblock();
}
public void createblock(){
blocks[currentblock]=new Random().nextInt(units);
for(int i=0;i<blocks[currentblock];i++){
groundplace[currentblock][i]=new Random().nextInt(units);
}
for (int i=1;i<units;i++){
blockX[i]=i*16;
}
}
public void loadimage(){
ImageIcon imc = new ImageIcon("12.png");
Mycar=imc.getImage();
ImageIcon iec = new ImageIcon("12.png");
Enemycar=iec.getImage();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(Mycar,x,y,this);
for(int j=0;j<=currentblock;j++){
for(int i=0;i<blocks[j];i++){
g.drawImage(Enemycar, blockX[groundplace[j][i]], blockY[j], this);
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
move();
for(int i=0;i<=currentblock;i++){
blockY[i]+=DOT_SIZE/8;
}
if(t_n==0){
t_n=System.currentTimeMillis();
t_f=t_n+t_d;
}
if(t_f<=System.currentTimeMillis()){
currentblock++;
createblock();
t_n=0;
}
if(blockY[2]==600){
currentblock=0;
}
repaint();
}
public void move(){
if(left){
x -= DOT_SIZE;
}
if(right){
x += DOT_SIZE;
}
if(up){
y -= DOT_SIZE;
}
if(down){
y += DOT_SIZE;
}
}
class FieldKeyListener implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
// super.keyPressed(e);
int key = e.getKeyCode();
if(key == KeyEvent.VK_A){
left=true;
}
if(key == KeyEvent.VK_RIGHT){
right=true;
}
if(key == KeyEvent.VK_UP ){
up=true;
}
if(key == KeyEvent.VK_DOWN){
down=true;
}
}
@Override
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void keyReleased(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
Обычно проблема заключается в том, что фокус находится на другом элементе, и он первым перехватывает событие. Есть вариант сделать остальные элементы
setFocusable(False);
Если они получают фокус.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Следующий код работаетТо есть, происходит действие аналогичное нажатию Ctrl+A
На сайте используется yii2, В форме для валидации номера телефона подключён плагин jquerymaskedinput
Подскажите, есть вот такой скриптНа высоте 700px от верха, меню становиться sticky