Keyevents not working

Asked

Viewed 15 times

0

I wrote this program recently and I’m having some problems with the keystroke events. It was so that when I pressed a specific key a message would appear on the console, but this is not happening. Follow the code below :

package com.dudugames.main;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;

import com.dudugames.entities.Entity;
import com.dudugames.entities.Player;
import com.dudugames.graphics.Spritesheet;

public class Game extends Canvas implements Runnable,KeyListener{
   
   /**
    * 
    */
   private static final long serialVersionUID = 1L;
   public static JFrame frame;
   private Thread thread;
   private boolean isRunning = true;
   private final int  WIDTH = 240;
   private final int HEIGHT = 160;
   private final int  SCALE = 3;
   
   private BufferedImage image;
   
   public List<Entity> entities;
   public Spritesheet spritesheet;
   
   public Game(){
   addKeyListener(this);   
   setPreferredSize(new Dimension(WIDTH*SCALE,HEIGHT*SCALE));
   initFrame();    
   //Inicializando Objetos
   image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
   entities = new ArrayList<Entity>();
   spritesheet = new Spritesheet("/spritesheet.png");
   
   Player player = new Player(0,0,16,16,spritesheet.getSprite(36, 0, 15, 17));
   entities.add(player);
   }
   public void initFrame() {
       frame = new JFrame("Teste #1");
       frame.add(this);
       frame.setResizable(false);
       frame.setLocationRelativeTo(null);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setVisible(true);
       frame.pack();
   }
   
   public synchronized void start() {
       thread = new Thread(this);
       isRunning = true;
       thread.start();
   }
   public synchronized void stop() {
       isRunning = false;
       try {
           thread.join();
       }catch (InterruptedException e) {
           e.printStackTrace();
       }
       
   }
   
   public static void main(String[] args){
       Game game = new Game();
       game.start();
       
       
   }
   public void tick() {
       for(int i = 0; i < entities.size(); i++) {
           Entity e = entities.get(i);
           e.tick();
       }
   }
   public void render() {
       BufferStrategy bs = this.getBufferStrategy();
       if(bs== null) {
           this.createBufferStrategy(3);
           return;
       }
       Graphics g = image.getGraphics();
       g.setColor(new Color(40,161,230));
       g.fillRect(0, 0, WIDTH,HEIGHT);
       Graphics2D g2 = (Graphics2D) g;
       for(int i = 0; i < entities.size(); i++) {
           Entity e = entities.get(i);
           e.render(g);
       g.dispose();
       g = bs.getDrawGraphics();
       g.drawImage(image, 0, 0, WIDTH*SCALE,HEIGHT*SCALE,null);
       bs.show();
       }
   }
   
   public void run() {
       long lastTime = System.nanoTime();
       double amountOfTicks = 60.0;
       double ns = 1000000000 / amountOfTicks;
       double delta = 0;
       int frames = 0;
       double timer = System.currentTimeMillis();
       while (isRunning) {
           long now = System.nanoTime();
           delta+= (now - lastTime) / ns;
           lastTime = now;
           if(delta >= 1) {
               tick();
               render();
           frames++;
           delta--;
           }
       if(System.currentTimeMillis() - timer >= 1000) {
           System.out.println("Fps: "+ frames);
           frames = 0;  
           timer+=1000;
       }
       
   }
       
       stop();
}

   public void keyTyped(KeyEvent e) {
       
   }
   @Override
   public void keyPressed(KeyEvent e) {
       if(e.getKeyCode() == KeyEvent.VK_RIGHT||
               e.getKeyCode() == KeyEvent.VK_D) {
       }else if((e.getKeyCode() == KeyEvent.VK_LEFT||
               e.getKeyCode() == KeyEvent.VK_A)) {
       }
       
       if((e.getKeyCode() == KeyEvent.VK_UP||
               e.getKeyCode() == KeyEvent.VK_W)) {
       }else if((e.getKeyCode() == KeyEvent.VK_DOWN||
               e.getKeyCode() == KeyEvent.VK_S)) {
       }
       
   }
   @Override
   public void keyReleased(KeyEvent e) {
       
   }
}

I hope someone can help me, I’m new in programming.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.