JAVA: Program not detecting key presses using KeyListener

<p>I'm making a space shooter game in Java. I have it set to move up when I press the up key, but it is currently not working at all. I am using the <code>KeyPressed</code> method in the <code>KeyListener</code> interface. Here is my code. It is in 2 classes.</p><p>Game.java</p><pre><br /><code>package main;<br /><br />import java.awt.Canvas;<br />import java.awt.Color;<br />import java.awt.Graphics;<br />import java.awt.event.KeyEvent;<br />import java.awt.event.KeyListener;<br />import java.awt.image.BufferStrategy;<br />import java.awt.image.BufferedImage;<br />import java.io.IOException;<br /><br />import javax.imageio.ImageIO;<br />import javax.swing.JFrame;<br /><br />public class Game extends Canvas implements Runnable, KeyListener {<br /><br /> private static final long serialVersionUID = 1L;<br /> public static final int WIDTH = 800;<br /> public static final int HEIGHT = 600;<br /> public static final String TITLE = "Space Shooter";<br /><br /> private boolean running = false;<br /> private Thread thread;<br /><br /> private Player player;<br /><br /> private BufferedImage playerImage;<br /><br /> int playerx;<br /> int playery;<br /><br /> public Game() {<br /> player = new Player((WIDTH/2)-32, 400); <br /> try {<br /> playerImage = ImageIO.read(this.getClass().getResourceAsStream("/res/player.png"));<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /><br /> addKeyListener(this);<br /> }<br /><br /> private synchronized void start() {<br /> if (running)<br /> return;<br /><br /> running = true;<br /> thread = new Thread(this);<br /> thread.start();<br /> }<br /><br /> private synchronized void stop() {<br /> if (!running)<br /> return;<br /><br /> running = false;<br /> try {<br /> thread.join();<br /> } catch (InterruptedException e) {<br /> e.printStackTrace();<br /> }<br /> System.exit(1);<br /> }<br /><br /> @Override<br /> public void run() { <br /> long lastTime = System.nanoTime();<br /> final double amountOfTicks = 60.0;<br /> double ns = 1000000000 / amountOfTicks;<br /> double delta = 0;<br /> int updates = 0;<br /> int frames = 0;<br /> long timer = System.currentTimeMillis();<br /> while (running) {<br /> long now = System.nanoTime();<br /> delta += (now - lastTime) / ns;<br /> lastTime = now;<br /> if (delta > 1) {<br /> tick();<br /> updates++;<br /> delta--;<br /> }<br /> render();<br /> frames++;<br /><br /> if (System.currentTimeMillis() - timer > 1000) {<br /> timer += 1000;<br /> System.out.println(updates + " TICKS, " + frames + " FPS");<br /> updates = 0;<br /> frames = 0;<br /> }<br /> }<br /> stop(); <br /> }<br /><br /> public void tick() {<br /> playerx = player.getX();<br /> playery = player.getY(); <br /> }<br /><br /> public void render() {<br /> BufferStrategy bs = this.getBufferStrategy();<br /> if (bs == null) {<br /> createBufferStrategy(3);<br /> return;<br /> }<br /> Graphics g = bs.getDrawGraphics();<br /><br /> g.drawImage(playerImage, playerx, playery, this); <br /><br /> g.dispose();<br /> bs.show();<br /> }<br /><br /> @Override<br /> public void keyPressed(KeyEvent e) {<br /> int key = e.getKeyCode();<br /> if (key == KeyEvent.VK_UP) {<br /> player.setY(playery -= 5);<br /> }<br /> }<br /><br /> public void keyReleased(KeyEvent e) {}<br /> public void keyTyped(KeyEvent e) {}<br /><br /> public static void main(String[] args) {<br /><br /> Game game = new Game();<br /> JFrame frame = new JFrame(TITLE);<br /><br /> frame.setSize(WIDTH, HEIGHT);<br /> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br /> frame.setResizable(false);<br /> frame.add(game);<br /> frame.getContentPane().setBackground(Color.BLACK);<br /> frame.setVisible(true); <br /><br /> game.start();<br /><br /> }<br /><br />}<br /></code><br /></pre><p>Player.java</p><pre><br /><code>package main;<br /><br />public class Player {<br /><br /> int x, y; <br /><br /> public Player(int x, int y) {<br /> this.x = x;<br /> this.y = y;<br /> }<br /><br /> public int getX() {<br /> return x;<br /> }<br /><br /> public int getY() {<br /> return y;<br /> }<br /><br /> public void setX(int x) {<br /> this.x = x;<br /> }<br /><br /> public void setY(int y) {<br /> this.y = y;<br /> }<br /><br />}<br /></code><br /></pre><br /><h2>Click here view more answers <a href="http://ift.tt/1Twj6dd">http://ift.tt/1Twj6dd</a></h2>

Nhận xét

Bài đăng phổ biến từ blog này

Align div to bottom of the page in bootstrap

Align elements inside an tag vertically

Javascript is unable to stop page loading