【发布时间】:2015-06-18 04:07:59
【问题描述】:
在有人说这个问题已经回答之前,我在任何地方都找不到这个,因为我没有使用缓冲图像,我使用 g.drawRect(...) 等等...来绘制我的对象,这个是我被告知要做的,因为我现在正在学习如何编码。但是由于某种原因,屏幕一直在闪烁,我需要一些帮助。
所以,我对编码很陌生,我正在尝试编写一个非常简单的炸弹人游戏。而且我没有使用 BufferedImages,我只是使用图形绘制来绘制角色。而且,当我添加 KeyBinding 时,我使用 repaint() 在按下某个键时“更新”游戏。但这非常有问题,当我按住其中一个按钮时,它会出现故障并显示空白屏幕。我认为这是由于我重新粉刷它,但我不知道如何去解决这个问题。这是我正在使用的一些代码。
public static void left(Graphics g) {
bomberManLowerLeft(g, -90 + dx, -20 + dy);
bomberManBodyLeft(g, -90 + dx, -20 + dy);
bomberManFaceLeft(g, -90 + dx, -20 + dy);
}
public static void right(Graphics g) {
bomberManLowerRight(g, -90 + dx, -20 + dy);
bomberManBodyRight(g, -90 + dx, -20 + dy);
bomberManFaceRight(g, -90 + dx, -20 + dy);
}
public void paint(Graphics g) {
if (down) {
front(g);
} else if (up) {
back(g);
} else if (left) {
left(g);
} else if (right) {
right(g);
}
}
public static void main(String[] args) {
Frame frm = new BomberMan();
frm.setSize(750, 750);
frm.setVisible(true);
frm.add(panel);
frm.setBackground(Color.black);
}
@Override
public void keyPressed(KeyEvent e) {
int kCode = e.getKeyCode();
if (kCode == KeyEvent.VK_D) {
System.out.println("Right");
dx += 3;
down = false;
right = true;
left = false;
up = false;
repaint();
} else if (kCode == KeyEvent.VK_A) {
System.out.println("Left");
dx -= 3;
down = false;
right = false;
left = true;
up = false;
repaint();
} else if (kCode == KeyEvent.VK_W) {
System.out.println("Up");
dy -= 3;
down = false;
right = false;
left = false;
up = true;
repaint();
} else if (kCode == KeyEvent.VK_S) {
System.out.println("Down");
dy += 3;
down = true;
right = false;
left = false;
up = false;
repaint();
} else if(kCode == KeyEvent.VK_SPACE){
placeBomb = true;
bombdx = dx;
bombdy = dy;
repaint();
}
}
我真的需要一些帮助,谢谢。如果你确实需要完整的代码,那就是:PASTEBIN-CODE
【问题讨论】:
标签: java graphics paint keylistener repaint