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

问题:在碰撞机制中获取飞机和炮弹的矩形时出现错误。

情况:就是"getRect()"显示该方法没有定义于shell和plane中,多次比较了代码,并尝试复制课件这部分的源码,也未能解决。

package cn.sxt.game;

import java.awt.Color;



import java.awt.Font;
import java.awt.Frame;
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;


/**
 * 飞机游戏的窗口
 * @author 纪光
 *
 */

public class MyGameFrame extends Frame {
    
    Image  planeImg = GameUtil.getImage("Images/plane.png");
    Image  bg = GameUtil.getImage("Images/bg.jpg");
    
    //采用面向对象的形式将飞机进行封装
    Plane plane = new Plane(planeImg,250,250); 
    Shell[] shells = new Shell[20];
    
  public void paint(Graphics g){
     g.drawImage(bg,0,0,null);
     plane.drawSelf(g); //画飞机
     for(int i= 0;i<shells.length;i++){
            shells[i].draw(g);
             //飞机和炮弹的碰撞检测
        
            boolean  peng = shells[i].getRect().intersects(plane.getRect());
             
            if(peng) {
                plane.live = false;
            }
        }
    
}
  //帮助我们反复重画窗口
  class PaintThread extends Thread {
      @Override
    public void run() {
          while(true){
            //  System.out.println("窗口画一次!");
              repaint(); //重画
              try {
                Thread.sleep(40);
            } catch (InterruptedException e) {            
                e.printStackTrace();
            }
          }
    }
  }
      //定义键盘监听的内部类
  class KeyMonitor extends KeyAdapter{


    public void keyPressed(KeyEvent e) {
        System.out.println("按下:"+e.getKeyCode());
        plane.addDirection(e);
    }

    public void keyReleased(KeyEvent e) {
        System.out.println("松开:"+e.getKeyCode());
        plane.minusDirection(e);
    }
      
      
  }

    /**
     * 初始化窗口
     */
    public void launchFrame(){
        this.setTitle("尚学堂学员_纪光的作品!");
        this.setVisible(true);
        this.setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
        this.setLocation(200,200);
        
        /**
         * 将窗口关闭,写一个内部类
         */
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }    
        } );
        new PaintThread().start();
        addKeyListener(new KeyMonitor());
        //初始化20个炮弹
        for(int i= 0;i<shells.length;i++){
            shells[i] = new Shell();
            
        }
    }
    public static void main(String[] args){
        MyGameFrame f = new MyGameFrame();
        f.launchFrame();
    }
     /**

    * 解决闪烁问题

    * */

    private Image offScreenImage=null;

    public void update(Graphics g) { //update前面的u必须小写
        System.out.println("判断是否执行双缓冲");
        if(offScreenImage==null) 
            offScreenImage=this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//游戏窗口宽高
        Graphics gOff = offScreenImage.getGraphics();
        paint(gOff);
        g.drawImage(offScreenImage, 0, 0, null);

    }
}

PlaneGame09.rar


JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3361楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 3362楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3365楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 3371楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 3372楼
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 3373楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 3374楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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