一:麻烦老师帮忙看看左键控制飞机的代码,问题飞机不受控制自动往右边移动,我按左移动键只会出现对应的数字,控制不了飞机:代码如下
package com.ss.plane;
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,7);
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;
}
}
//初始化窗口
public void launchFrame(){
this.setTitle("飞机大战-ss");
setVisible(true);//窗口默认不可见,设置可见
setSize(500,500);//窗口大小
setLocation(400,200);//窗口打开的位置
//增加关闭窗口的动作
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(0);//正常关闭
}
});
new PaintThred().start();//启动重画窗口的线程
this.addKeyListener(new KeyMonitor());
}
/**定义重画窗口的线程;
*定义内部类方便使用窗口类相关方法
*/
class PaintThred extends Thread{
@Override
public void run() {
while(true){
repaint();//内部类可以直接使用外部类的成员
try {
Thread.sleep(50);//1s=1000ms,1s画20次
} 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;
}
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("抬起:"+e.getKeyCode());//
if(e.getKeyCode()==KeyEvent.VK_LEFT){
left = 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 gamenFrame = new MyGameFrame();
gamenFrame.launchFrame();
}
}