老师,我按照高老师的代码操作的,但是不知道为什么,就标红了,希望老师解答一下
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 MyGameFrame extends Frame {
Image planeImg = GameUtil.getImage("images/plane.png");
Image bg = GameUtil.getImage("images/bg.jpg");
plane p1 = new plane(planeImg, 100, 100, 3);
boolean left, right, up, down; // 飞机的方向控制
@Override
public void paint(Graphics g) { //g当做一支画笔
g.drawImage(bg, 0, 0, 500, 500, null);
p1.drawMyself(g);
if (left) {
p1.x -= p1.speed;
}
if (right) {
p1.x += p1.speed;
}
if (up) {
p1.y -= p1.speed;
}
if (down) {
p1.y += p1.speed;
}
}
//初始化窗口
public void launchFrame() { //定义方法
this.setTitle("飞机大战.尚学堂");
setVisible(true); //窗口是否可见
setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT); //窗口大小
setLocation(100, 100); //窗口打开的位置
//增加关闭窗口的动作
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0); //正常退出程序
}
});
new PaintThread().start(); //启动重画窗口的线程
this.addKeyListener(new KeyMonitor()); // 启动键盘监听
}
/**
* 定义了一个重要窗口的线程类
* 定义成内部类是为了方便直接使用窗口类的相关方法
*/
class PaintThread extends Thread {
@Override
public void run() {
while (true) {
repaint(); //内部类可以直接使用外部类的成员
try {
Thread.sleep(50); //1s=1000ms,1s画20次(20*50=1000)
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//内部类,实现键盘的监听处理
class KeyMonitor extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
/** System.out.println("按下:" + e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
left = true;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
right = true;
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
up = true;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
down = true;
}*/
switch (e.getKeyCode()){
case KeyEvent.VK_LEFT:
left = true;
break;
case KeyEvent.VK_RIGHT:
right = true;
break;
case KeyEvent.VK_UP:
up = true;
break;
case KeyEvent.VK_DOWN:
down = true;
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("抬起:" + e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
left = false;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
right = false;
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
up = false;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
down = false;
}
}
private Image offScreenImage = null;
public void update(Graphics g) {
if (offScreenImage == null)
offScreenImage = this.createImage(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);
Graphics gOff = offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage, 0, 0, null);
}
public static void main(String[] args) {
MyGameFrame gameFrame = new MyGameFrame();
gameFrame.launchFrame();
}
}
}
最后的main方法里,static标红,以及上面public void update(Graphics g)里面,creatImage也标红。
按照高老师的视频,有返回去学了两节,也不知道哪里出错了