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
Đăng nhận xét