Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>The <code>Player</code> that is on the screen is not the same <code>Player</code> you are moving in your <code>KeyInputEvents</code> class...</p> <p>In <code>Board</code> you create an instance of <code>Player</code>...</p> <pre><code>public class Board extends JPanel implements ActionListener { Player p; public Board() { //... p = new Player(); } </code></pre> <p>And in <code>KeyInputEvents</code> you create another one...</p> <pre><code>public class KeyInputEvents extends KeyAdapter implements ActionListener { //.... Player p = new Player(); </code></pre> <p>These two instances are in no way related...</p> <p>While I'm here, you shouldn't really override <code>paint</code>, but instead, override <code>paintComponent</code> and you should definitely be calling <code>super.paintXxx</code></p> <p><strong>Update with a Key Bindings example</strong></p> <pre><code>import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.ActionMap; import javax.swing.ImageIcon; import javax.swing.InputMap; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.Timer; public class Game extends JFrame { public static void main(String[] args) { new Game(); } public Game() { add(new Board()); setTitle("Hi mom"); setSize(555, 330); setResizable(false); setLocationRelativeTo(null); setDefaultCloseOperation(3); setVisible(true); } public class Board extends JPanel implements ActionListener { Image background; Player p; private int xDelta, yDelta; public Board() { setFocusable(true); requestFocus(); ImageIcon img = new ImageIcon(getClass().getResource("/images/map.jpg")); background = img.getImage(); p = new Player(); InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, false), "Left.move"); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, true), "Left.stop"); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, false), "Right.move"); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, true), "Right.stop"); ActionMap am = getActionMap(); am.put("Left.move", new MoveLeft(this)); am.put("Left.stop", new StopAllMovement(this)); am.put("Right.move", new MoveRight(this)); am.put("Right.stop", new StopAllMovement(this)); Timer timer = new Timer(25, this); timer.start(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); //To change body of generated methods, choose Tools | Templates. g.drawImage(background, 0, 0, null); g.drawImage(p.getPlayer(), p.getX(), p.getY(), null); } protected void setMovement(int xDelta, int yDelta) { this.xDelta = xDelta; this.yDelta = yDelta; } public void actionPerformed(ActionEvent e) { p.move(xDelta, yDelta); repaint(); } public JPanel getBoard() { return this; } } public class Player { int x = 30; int y = 187; Image player; public Player() { ImageIcon img = new ImageIcon(getClass().getResource("/images/player.png")); player = img.getImage(); } public Image getPlayer() { return player; } public void move(int x, int y) { this.x += x; this.y += y; } public int getX() { return x; } public int getY() { return y; } } public abstract class AbstractMove extends AbstractAction { private Board board; private int xDelta; private int yDelta; public AbstractMove(Board board, int xDelta, int yDelta) { this.board = board; this.xDelta = xDelta; this.yDelta = yDelta; } @Override public void actionPerformed(ActionEvent e) { board.setMovement(xDelta, yDelta); } } public class MoveLeft extends AbstractMove { public MoveLeft(Board board) { super(board, -5, 0); } } public class MoveRight extends AbstractMove { public MoveRight(Board board) { super(board, 5, 0); } } public class StopAllMovement extends AbstractMove { public StopAllMovement(Board board) { super(board, 0, 0); } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload