会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132413个问题

老师,操控键盘飞机不动,这个代码哪里有问题呢?



package cn.sxt.game;


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("小飞机大战");

this.setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);

this.setLocation(400,200);  

this.setVisible(true);

this.addWindowListener(new WindowAdapter(){

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) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

//内部类,实现键盘的监听处理

class KeyMonitor extends KeyAdapter{

public void keyPressesed(KeyEvent e) {

/*System.out.println("按下"+e.getKeyCode());

if(e.getKeyCode()==KeyEvent.VK_LEFT) {

left=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;

}

}

public void keyReleased(KeyEvent e) {

/*System.out.println("抬起"+e.getKeyCode());

if(e.getKeyCode()==KeyEvent.VK_LEFT) {

left=false;

}*/

switch(e.getKeyCode()) {

case KeyEvent.VK_LEFT:

left=false;

break;

case KeyEvent.VK_RIGHT:

right=false;

break;

case KeyEvent.VK_UP:

up=false;

break;

case KeyEvent.VK_DOWN:

down=false;

break;

}

}

}

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();

}


}







package cn.sxt.game;


import java.awt.Graphics;

import java.awt.Image;


public class Plane extends GameObject{

public void drawMyself(Graphics g) {

super.drawMyself(g);

//飞机飞行的算法,可以自行设定

//x+=speed;

}


public Plane(Image img,double x,double y,int speed) {

super(img,x,y,speed);

}

}


JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 1187楼
JAVA 全系列/第一阶段:JAVA 快速入门/数组和数据存储 1188楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 1189楼
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 1192楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 1193楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 1195楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 1197楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 1199楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637