我正在学习一些新的,在Java中有些困难 - 这是图形!下面我解释两个类的作用。我现在的新障碍是想出一种方法,通过仅按Z来绘制不同的图像(即:像激光一样的射弹)。
问题是如果我编写一个方法,例如:“g.drawImage(laser,laser_dx,laser_dy,this)在包含”KeyEvent.VK_Z“的if语句中,我的keyPressed方法突然说”这个方法是不在当地使用“。我有什么办法来解决这个障碍?
到目前为止我所做的是在“GameBoard”类中编写了一个嵌套类,其中包含我程序的所有键盘事件。
private class Adapter extends KeyAdapter
{
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_RIGHT)
{
ball_dx += ball_velocity;
}
if(keyCode == KeyEvent.VK_LEFT)
{
ball_dx -= ball_velocity;
}
if(keyCode == KeyEvent.VK_Z){
}
}
}
这是一个名为“Gameboard”的单独类中的绘图图形方法:这个类只绘制一个绿球(这是一个.png图像)的图像,它可以用箭头键左右移动!
public class GameBoard extends JPanel implements ActionListener
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(ball, ball_dx, ball_dy, this);
Toolkit.getDefaultToolkit().sync();
}
public void actionPerformed(ActionEvent arg0)
{
repaint();
}
}
答案 0 :(得分:3)
你必须重新考虑逻辑:处理关键事件的代码和绘制所有内容的代码应该共享一个状态,以便
只是为了简单起见并给你一个想法:
boolean isLaser = false;
public void keyPressed(KeyEvent e) {
isLaser = true;
}
public void keyReleased(KeyEvent e) {
isLaser = false;
}
public void paintComponent(Graphics g) {
if (isLaser)
// do something
}
当然,在更复杂的环境中,您将拥有更加结构化的解决方案,例如
List<Entity> entities = new ArrayList<Entity>();
public void paintComponent(Graphics g) {
for (Entity e : entities)
e.draw(g);
}
public void keyPressed() {
entities.add(new LaserEntity(...));
}