Bonjour,
Je cherche à faire bouger un personnage avec les touches droite/gauche du clavier. Ce personnage est une image et se situe dans un JPanel, pour cela j'utilise un keyListener et je modifie les coordonnée de l'image puis je repaint (cela fonctionne) mais mon problème est le suivant:
Soit je modifie les coordonnée de 1px par exemple pour chaque event du keylistener et le déplacement est trop lent
Soit je le déplace par 10-15px et la vitesse et meilleure mais c'est visuellement atroce (on voit les sacades, pas fluide du tout)
Est ce qu'il y aurait un moyen de déplacer rapidement l'image de manière fluide?
Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 private class BananaGameView extends JPanel implements KeyListener { private BananaGameModel bananaGameModel; int x = 15; int y = 525; Image fond; Image character; public BananaGameView(BananaGameModel b) { super(); bananaGameModel = b; this.setLayout(null); this.setFocusable(true); this.requestFocusInWindow(); this.addKeyListener(this); JButton back = new JButton(); back.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("Pictures/BoutonBack.png" ))); this.add(back); back.setBounds(670, 520, 110, 59); back.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { MainWindow.gameOpened = false; MainWindow.gameWindow.dispose(); } }); try { fond = ImageIO.read(this.getClass().getClassLoader().getResource("Pictures/Level.png")); character = ImageIO.read(this.getClass().getClassLoader().getResource("Pictures/Character.png")); } catch (IOException e) { e.printStackTrace(); } } public void paintComponent(Graphics g){ g.drawImage(fond, 0, 0, this); g.drawImage(character, x, y, this); } @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_LEFT && x>=10) x-=15; else if(e.getKeyCode() == KeyEvent.VK_RIGHT && x<=715) x+=15; else if(e.getKeyCode() == KeyEvent.VK_SPACE) y-=15; repaint(); } // Problème ici: si je met 15 comme là c'est saccadé si je met 1 ou 2 c'est trop lent... @Override public void keyReleased(KeyEvent e) { } @Override public void keyTyped(KeyEvent e) { } }
Partager