public void action(){ init(); addMouseListener(); Timer timer= new Timer(); TimerTask task= new TimerTask(){ @Override public void run() { if(state==GameState.runing){ index++; if(index>b_planeInterval*s_planeInterval*buttet_sInterval*bomb_sInterval*bulletInterval){ index=1; } enemyEnter(); step(); outOfBounds(); shoot(); hit(); impact(); check(); } repaint(); } }; timer.schedule(task, 10,10); }
时间: 2024-04-21 22:25:56 浏览: 82
这是一个名为 action 的方法,用于启动游戏循环。在该方法中,首先调用了 init 方法,用于初始化游戏状态和对象。接着,调用了 addMouseListener 方法,用于添加鼠标监听器。然后,创建了一个 Timer 对象和一个 TimerTask 对象,在 TimerTask 对象的 run 方法中,首先判断游戏状态是否为运行状态,如果是,就执行一系列操作,包括增加计数器 index,检查计数器是否达到一定值,如果达到了,就重置计数器并使敌人进入游戏、移动、越界、射击、碰撞、检查游戏状态等。然后,调用 repaint 方法重绘界面。最后,使用 Timer 对象的 schedule 方法,以指定的延迟和周期执行 TimerTask 对象。这个方法通常在游戏开始时被调用,用于启动游戏循环。
相关问题
public void addMouseListener(){ MouseAdapter mouseAdapter=new MouseAdapter(){ public void mouseClicked(MouseEvent e) { if(state==GameState.pause||state==GameState.start){ state=GameState.runing; } else if(state==GameState.gameover){ init(); state=GameState.runing; } else { state=GameState.pause; } }
这是一个名为 addMouseListener 的方法。在这个方法中,首先创建了一个 MouseAdapter 的对象 mouseAdapter,重写了其中的 mouseClicked 方法。在 mouseClicked 方法中,首先判断游戏状态是否为 pause 或 start,如果是,则将游戏状态改为 runing,即开始游戏。如果游戏状态为 gameover,则调用 init 方法重新初始化游戏,并将游戏状态改为 runing。如果游戏状态为 runing,则将游戏状态改为 pause,即暂停游戏。最后,将 mouseAdapter 对象添加为游戏窗口的鼠标监听器。
public class JavaMain { public static void main(String[] args) { new MyWindow(); } } class MyWindow extends JFrame implements MouseListener, MouseMotionListener, ActionListener { //定义两个点 private Point oldPoint = null,newPoint = null; public MyWindow () { this.setSize(600,600); addMouseListener(this); addMouseMotionListener(this); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //画图 public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setStroke(new BasicStroke(10.0f)); g2.setColor(Color.red); if(oldPoint!=null&&newPoint!=null) { g2.drawLine(oldPoint.x, oldPoint.y, newPoint.x, newPoint.y); oldPoint=newPoint; newPoint=null;//置为空,为了迎接下一个点的到来 } } //鼠标拖动事件 @Override public void mouseDragged(MouseEvent e) { if(oldPoint==null) { oldPoint=e.getPoint(); }else { newPoint=e.getPoint(); repaint();//生成新的点,通知系统去更新绘图 } } @Override public void mouseMoved(MouseEvent e) {} //鼠标单击事件 @Override public void mouseClicked(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) {} //鼠标释放事件,清空工作 @Override public void mouseReleased(MouseEvent e) { newPoint=null; oldPoint=null; } }设置清除画布按钮
您可以在 `MyWindow` 类中添加一个按钮,并为其添加一个 `ActionListener`,在按钮被点击时清除画布。代码示例如下:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MyWindow extends JFrame implements MouseListener, MouseMotionListener, ActionListener {
private Point oldPoint = null, newPoint = null;
private JButton clearButton; // 添加一个清除按钮
public MyWindow() {
this.setSize(600, 600);
addMouseListener(this);
addMouseMotionListener(this);
// 初始化清除按钮
clearButton = new JButton("清除画布");
clearButton.addActionListener(this);
JPanel buttonPanel = new JPanel();
buttonPanel.add(clearButton);
add(buttonPanel, BorderLayout.SOUTH);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(10.0f));
g2.setColor(Color.red);
if (oldPoint != null && newPoint != null) {
g2.drawLine(oldPoint.x, oldPoint.y, newPoint.x, newPoint.y);
oldPoint = newPoint;
newPoint = null;
}
}
@Override
public void mouseDragged(MouseEvent e) {
if (oldPoint == null) {
oldPoint = e.getPoint();
} else {
newPoint = e.getPoint();
repaint();
}
}
@Override
public void mouseMoved(MouseEvent e) {}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {
newPoint = null;
oldPoint = null;
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == clearButton) {
Graphics g = getGraphics();
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
}
}
}
```
在上面的代码中,我们添加了一个 `clearButton` 按钮,并在其上添加了一个 `ActionListener`。当按钮被点击时,会调用 `actionPerformed` 方法清除画布。在 `actionPerformed` 方法中,我们获取了 `MyWindow` 的 `Graphics` 对象,并使用 `fillRect` 方法覆盖整个画布。这样就达到了清除画布的效果。
阅读全文