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

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

情况:就是"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 快速入门/飞机大战小项目训练 1456楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 1457楼
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 1460楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 1461楼
JAVA 全系列/第一阶段:JAVA 快速入门/控制语句、方法、递归算法 1463楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 1464楼

image.png

package com.bjsxt.array;

/**
 * 使用javabeen和数组存储表格信息。
 * 这个方式非常重要!!!!!!!
 */
public class Test09 {
    public static void main(String[] args) {
    emp emp0=new emp(1001,"闫小一",25,"程序员","2015-9-09");
    emp emp1=new emp(1002,"闫小二",21,"程序员","2019-9-09");
    emp emp2=new emp(1003,"闫小三",28,"程序员","2017-9-09");
    emp emp3=new emp(1004,"闫小四",24,"程序员","2013-9-09");
    emp[] emps=new emp[4];
    emps[0]=emp0;
    emps[1]=emp1;
    emps[2]=emp2;
    emps[3]=emp3;
    //遍历数组
     for(int j=0;j< emps.length;j++);

        System.out.println(emps[j]);

    }
   class emp{
        private int id;
        private String name;
        private int age;
        private String job;
        private String hiredate;


        public emp(){}
        public emp(int id, String name, int age, String job, String hiredate) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.job = job;
            this.hiredate = hiredate;
        }

        @Override
        public String toString() {
            return "emp{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    ", job='" + job + '\'' +
                    ", hiredate='" + hiredate + '\'' +
                    '}';
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getJob() {
            return job;
        }

        public void setJob(String job) {
            this.job = job;
        }

        public String getHiredate() {
            return hiredate;
        }

        public void setHiredate(String hiredate) {
            this.hiredate = hiredate;
        }
    }



}


JAVA 全系列/第一阶段:JAVA 快速入门/数组和数据存储 1466楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 1467楼
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 1469楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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