JiaXiaoP 2019-11-27 13:49 采纳率: 0%
浏览 400

飞机小游戏程序能执行,但是键盘监听按上下左右键没反应

package cn.sxt.game;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;

public class Plane extends GameObject {

int speed=3;
boolean left,up,right,down;

public void  drawSelf(Graphics g){
    g.drawImage(img, (int)x, (int)y, null);

    if(left){
        x -= speed;
    }
    if(right){
        x += speed;
    }
    if(up){
        y -= speed;
    }
    if(down){
        y -= speed;
    }
}

public Plane(Image img,double x,double y){
    this.img = img;
    this.x = x;
    this.y = y;
}

public void addDirection(KeyEvent e){
    System.out.println("############");
    switch(e.getKeyCode()){
    case KeyEvent.VK_LEFT:
        left = true;
        break;
    case KeyEvent.VK_UP:
        up = true;
        break;
    case KeyEvent.VK_RIGHT:
        right = true;
        break;
    case KeyEvent.VK_DOWN:
        down = true;
        break;
    }
}

public void minusDirection(KeyEvent e){
    switch(e.getKeyCode()){
    case KeyEvent.VK_LEFT:
        left = false;
        break;
    case KeyEvent.VK_UP:
        up = false;
        break;
    case KeyEvent.VK_RIGHT:
        right = false;
        break;
    case KeyEvent.VK_DOWN:
        down = false;
        break;
    }
}

}


package cn.sxt.game;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;

public class MyGameFrame extends JFrame {
Image bg=GameUtil.getImage("images/bg.jpg");
Image planeImg=GameUtil.getImage("images/plane.png");
Plane plane = new Plane(planeImg,250,250);

@Override
public void paint(Graphics g) {
    // TODO Auto-generated method stub
    super.paint(g);
    g.drawImage(bg, 0, 0, null);
    plane.drawSelf(g);
}

class paintThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while(true){
repaint();

        try {
            Thread.sleep(40);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

}

class KeyMonitor extends KeyAdapter{

@Override
public void keyPressed(KeyEvent e) {
    plane.addDirection(e);
}

@Override
public void keyReleased(KeyEvent e) {
    plane.minusDirection(e);
}

}

public void launchFrame(){
    this.setTitle("尚学堂学员_程序猿作品");
    this.setVisible(true);
    this.setSize(500, 500);
    this.setLocation(300, 300);
    this.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            System.exit(0);
        }
    });

    new paintThread().run();
    addKeyListener(new KeyMonitor());
}

private Image offScreenImage = null;

public void update(Graphics g) {
    if(offScreenImage == null)
        offScreenImage = this.createImage(500,500);//这是游戏窗口的宽度和高度

    Graphics gOff = offScreenImage.getGraphics();
    paint(gOff);
    g.drawImage(offScreenImage, 0, 0, null);
}   

public static void main(String[] args){
    MyGameFrame g=new MyGameFrame();
    g.launchFrame();
}

}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-21 13:59
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划