zoukankan      html  css  js  c++  java
  • 4.15Java游戏小项目之矩形检测

    4.15Java游戏小项目之矩形检测

    因为JFrame类还会使画面微闪,所以还要引入双缓冲

    (也可以用新的方法,但是不做过多介绍)

    双缓冲技术实现原理

    • 代码实现上是设置一个空变量

    • 为改变量写一个方法

    • 相当于在内存中先画一个窗口图片进行缓存

       //继承的类要改成Frame
    /*
       为这个属性写一个方法
       实现逻辑:
       进行if条件判断
       将变量设置为空,如果是空的就创建窗口值赋予变量---类.属性
       再将属性的get方法赋予Graphics画笔对象
       画出对象
        */
       public void update(Graphics g){
           if (offScreenImage == null){
               offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
          }else {
    //            System.out.printf("Error");
          }

           /*再将属性的get方法赋予Graphics画笔对象*/
           Graphics gOff = offScreenImage.getGraphics();

           paint(gOff);
           
           /*画出对象*/
           g.drawImage(offScreenImage,0,0,null);
      }

    矩形检测原理

    物体交互原理

    Java中物体交互原理就是矩形检测原理:

    • 游戏中的物体抽象成矩形---无论是圆还是其他图形

    • 判断矩形是否相交即可

    • 多边形可以抽象分解成多个矩形然后继续进行矩形检测

    Java的API中提供了Rectangle类来表示矩形相关信息

    提供了intersects()方法,直接判断矩形是否相交

    每画一次炮弹就跟飞机进行比较

    注意:

    • 要定义飞机的宽度和高度

    • 要定义炮弹的宽度和高度

    • 定义属性让飞机死掉

    定义飞机的宽度和高度:

        /*重写构造器*/
       public Plane(Image img, double x, double y){
           this.img = img;
           this.x = x;
           this.y = y;
           this.speed = 300;
           this.width = img.getWidth(null);
           this.height = img.getHeight(null);


      }

    定义炮弹的宽度和高度:

        /*构造方法构造一个随机数*/
       public Shell(){
           x = 200; //这里的x,y继承了GameObject类,所以是double类型的数
           y = 200; //所以下面用到x,y的时候要进行强制转型
           width = 10;
           height = 10;
           speed = 3;
           /*希望是一个随机的值,希望生成随机角度*/
           degree = Math.random() * Math.PI * 2;
      }

    定义属性让飞机死掉:

            //利用遍历的方法画出50发炮弹
           for (int i =0; i < shells.length; i++){
               shells[i].draw(g);

               /*判断炮弹矩形是否与飞机矩形相碰*/
               boolean peng = shells[i].getRect().intersects(p.getRect()); //getRect是获得矩形,设置变量是否了好进行if判断

               /*进行if判断是否相碰,飞机和炮弹的碰撞检测*/
               if (peng){
    //               System.out.println("碰到了!!!");
                   p.live = false; //相碰死掉
              }
          }

      }

     

    It's a lonely road!!!
  • 相关阅读:
    ubuntu下文件安装与卸载
    webkit中的JavaScriptCore部分
    ubuntu 显示文件夹中的隐藏文件
    C语言中的fscanf函数
    test
    Use SandCastle to generate help document automatically.
    XElement Getting OuterXML and InnerXML
    XUACompatible meta 用法
    Adobe Dreamweaver CS5.5 中文版 下载 注册码
    The Difference Between jQuery’s .bind(), .live(), and .delegate()
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14664355.html
Copyright © 2011-2022 走看看