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!!!
  • 相关阅读:
    type 、instanceof、in 和 hasOwnproperty
    从代码中抽离数据的原则
    NSNotificationCenter 通知中心传值
    imageView添加阴影和边框
    block的基本使用
    内存管理总结
    把color转成image的方法
    Instruments检测解决内存泄露以及进行性能测试
    Xcode7 修改项目名完全攻略
    UITextField的使用总结
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14664355.html
Copyright © 2011-2022 走看看