08. marts 2020 - 10:33
Der er
12 kommentarer
Kan ikke bruge mit MAC tastatur i KeyEvent i JAVA
Hej. Jeg er ved at programmere et "Snake Game" program i Java, og alt spiller på nær at kunne bevæge slangen. Jeg kan få lov at skrive til JFrame, men kan ikke få lov at flytte slangen. Jeg benytter KeyEvent, og e.getKeyCode== kommandoen. Synes jeg hart prøvet alt, så er lidt i tvivl om det er en hardware indstilling der låser for brug. Jeg bruger en MacBook Pro, og har den på nogle tidspunkter sat til et eksternt tastatur og mus via en HUB. Ingen af tastaturerne virker. Vil virkelig sætte pris på gode råd. Og smider gerne koden op...... Tak fra Malene
Annonceindlæg fra Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
08. marts 2020 - 18:51
#1
Bruger du keyPressed, keyReleased eller keyTyped?
08. marts 2020 - 20:19
#2
Jeg har indsat alle 3 metoder via @override.
08. marts 2020 - 22:53
#3
keyPressed er nok den rigtige. Men kan du ikke dumpe e.getKeyCode() ud og se hvad den faktisk modtager?
09. marts 2020 - 19:21
#4
@Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT) { moves++; right = true; if (!left) { right = true; } else { right = false; left = true; } up = false; down = false; if (e.getKeyCode() == KeyEvent.VK_LEFT) { moves++; left = true; if (!right) { left = true; } else { left = false; right = true; } up = false; down = false; if (e.getKeyCode() == KeyEvent.VK_UP) { moves++; up = true; if (!down) { up = true; } else { up = false; down = true; } left = false; right = false; if (e.getKeyCode() == KeyEvent.VK_DOWN) { moves++; down = true; if (!up) { down = true; } else { down = false; up = true; } left = false; right = false; }
09. marts 2020 - 19:22
#5
Har smidt koden op nu. Håber du måske kan hjælpe :)
09. marts 2020 - 19:35
#6
Prøg og kør programmet i et konsol vindue og tilføj en linie: public void keyPressed(KeyEvent e) { System.out.println(e.getKeyCode()); .... Så du kan se hvad programmet faktisk modtager.
09. marts 2020 - 19:56
#7
Den modtaget ikke noget:/ Kan ikke lige gennemskue hvad der er galt
10. marts 2020 - 01:24
#8
Din klasse med de metoder implements KeyListerner eller ville du få en fejl på @Overide Men får du også kaldt addKeyListener med en instans?
10. marts 2020 - 10:09
#9
Jeg kalder addKeyListener (this) i min Game klasse: class GamePlay extends JPanel implements KeyListener, ActionListener { private int[] snakeXlength = new int[750]; private int[] snakeYlength = new int[750]; private boolean left = false; private boolean right = false; private boolean up = false; private boolean down = false; private ImageIcon rightmouth; private ImageIcon leftmouth; private ImageIcon upmouth; private ImageIcon downmouth; private int lengthOfSnake = 3; private Timer timer; private int delay = 100; private ImageIcon snakeimage; private Random random = new Random(); private int xpos = random.nextInt(34); private int ypos = random.nextInt(23); private int score = 0; private ImageIcon titleImage; private int moves; public GamePlay() { addKeyListener(this); // addKeyListener(new MKeyListener()); setFocusable(true); setFocusTraversalKeysEnabled(false); timer = new Timer(delay, this); timer.start();
10. marts 2020 - 15:39
#10
Er der fokus paa det panel? Maaske var det bedre at saette key listener paa framen.
11. marts 2020 - 20:53
#11
Jeg har sat key listener ind i main, i frame. Kan få lov at skrive tekst til konsollen, men den vil ikke flytte noget i selve spillet public class Main extends JFrame implements KeyListener, ActionListener { public static void main(String[] args) throws Exception { JFrame obj = new JFrame("Key Listener"); GamePlay gamePlay = new GamePlay(); KeyEvents keyEvents = new KeyEvents(); KeyListener listener = new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { GamePlay gamePlay=new GamePlay(); gamePlay.keyPressed(e); if (e.getKeyCode() == KeyEvent.VK_RIGHT) System.out.println("rr"); else if (e.getKeyCode() == KeyEvent.VK_LEFT) System.out.println("ll"); else if (e.getKeyCode() == KeyEvent.VK_DOWN) System.out.println("dd"); else if (e.getKeyCode() == KeyEvent.VK_UP) System.out.println("ii"); } @Override public void keyReleased(KeyEvent e) { } }; obj.setVisible(true); obj.setBounds(10, 10, 905, 700); obj.setBackground(Color.DARK_GRAY); obj.setResizable(false); obj.add(gamePlay); obj.add(keyEvents); obj.addKeyListener(listener); obj.setFocusable(true); obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } @Override public void actionPerformed(ActionEvent e) { } }
06. april 2020 - 00:16
#12
Fik du løst det?
Kurser inden for grundlæggende programmering