承接上一篇,我们必须隐藏窗口才能让方块跑起来,如果按键让其跑起来呢。
这就要监听按键。
顺便说说匿名内部类,当一个类只有一个地方使用的时候,就可以写成内部类。
代码如下:
package com.tavon.tank;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TankFrame extends Frame {
int x = 200;
int y = 200;
public TankFrame() {
setSize(800, 600);//设置这个窗口的大小
setResizable(false);//不能拖动窗口的大小
setTitle("tank war");//窗口的标题
setVisible(true);//把这个窗口展示出来
this.addKeyListener(new MykeyLisener());//这个方法是为了监听键盘的
addWindowListener(new WindowAdapter() {//点击关闭按钮就可以关闭窗口。
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void paint(Graphics graphics) {
graphics.fillRect(x, y, 50, 50);
x += 10;
y += 10;
System.out.println("paint" + x + "---" + y);
}
//这个类因为只有这里用所以就设计为内部类
class MykeyLisener extends KeyAdapter {
@Override
public void keyPressed(KeyEvent keyEvent){
System.out.println("按下一个键就会触发");
}
@Override
public void keyReleased(KeyEvent keyEvent){
System.out.println("当某个键松开的时候触发");
}
}
}
注意这个内部类是写在TankFrame类的里面,如果写在外面就不是内部类了。
实现了键盘的监听,接下来就是通过按键让其移动:
代码如下:每按一次键就让paint的方法调用一次就可以了。
public void keyPressed(KeyEvent keyEvent){
System.out.println(“按下一个键就会触发”);
repaint();//调用一次就相当于调用paint方法。
}
在此处增加一行代码即可。
我方的坦克通过操作方向可以移动,那敌人的坦克呢,是自己移动的。如何实现。
使用while循环 即可实现.代码如下:
package com.tavon.tank;
public class Starter{
public static void main(String[] args) throws InterruptedException {
TankFrame tankFrame = new TankFrame();
while(true){
Thread.sleep(50); //每隔50毫秒
tankFrame.repaint();//重新绘制一次窗口
}
}
}