【发布时间】:2017-08-16 23:16:12
【问题描述】:
我有一个 Jpanel,我可以在其中绘制一个级别的游戏。我的问题是该方法运行没有重新绘制图像。我究竟做错了什么? 如果我在 keyLister 中调用 repaint(),则 jpanel 将被重新绘制但可运行的并不重要......
感谢您的帮助!!!!
public class Board extends JPanel implements Runnable {
private Map map;
private Player player;
public Board(String path) {
this.map = new Map(path);
this.jugador = new Jugador();
addKeyListener(new Al());
this.setFocusable(true);
}
public void paint(Graphics g) {
super.paint(g);
for (int y = 0; y < 23; y++) {
for (int x = 0; x < 37; x++) {
if (map.getLab(x, y).equals("f")) {
g.drawImage(map.getImgFinish(), x * map.getTamImagen(), y * map.getTamImagen(), null);
}
if (map.getLab(x, y).equals("g")) {
g.drawImage(map.getImgGrass(), x * map.getTamImagen(), y * map.getTamImagen(), null);
}
if (map.getLab(x, y).equals("w")) {
g.drawImage(map.getImgWall(), x * map.getTamImagen(), y * map.getTamImagen(), null);
}
}
player.drawPlayer(g, player.getCoorX() * map.getTamImagen(), player.getCoorY() * map.getTamImagen());
}
}
public void run() {
while (true) {
repaint();
}
}
public class Al extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_LEFT) {
if (!map.getLab(player.getCoorX() - 1, player.getCoorY()).equals("w")) {
player.move(-1, 0);
}
}
if (keyCode == KeyEvent.VK_RIGHT) {
if (!map.getLab(player.getCoorX() + 1, player.getCoorY()).equals("w")) {
player.move(1, 0);
}}}}}
【问题讨论】:
标签: java multithreading swing runnable