美文网首页程序改变世界
2D 游戏激光炮实现

2D 游戏激光炮实现

作者: 齊葩 | 来源:发表于2017-12-01 14:20 被阅读21次

    1:首先需要知道起点,终点,激光宽度
    2:判断所有的敌人与激光起点,终点连接起来的线段的垂直距离,如果小于激光宽度/2就说明打到了(注意敌人是有体积的)

    基本没什么难点,如果有就是计算敌人与线段的垂直距离。

    下面是计算距离的代码

    /*********************************/  
    // 如果经过点做直线的垂足,垂足落在线段上,则取垂线段的距离  
    // 否则取到线段两端点距离的最小值  
    //  
    // 参数:  
    // point:  存储点的xy坐标  
    // p1, p2: 线段的两点  
    //  
    // return: 点到线段的最小距离  
    /*********************************/  
    private static double distance(Point p, Point p1) {
        return Math.hypot(p.x-p1.x, p.y-p1.y);
      }
      //点到线段的最短距离,x0,y0是圆心
      private static double pointToLine(Point p1,Point p2, Point p) {
        double ans = 0;
        double a, b, c;
        a = distance(p1, p2);
        b = distance(p1, p);
        c = distance(p2, p);
        if (c+b==a) {//点在线段上
          ans = 0;
          return ans;
        }
        if (a<=0.00001) {//不是线段,是一个点
          ans = b;
          return ans;
        }
        if (c*c >= a*a + b*b) { //组成直角三角形或钝角三角形,p1为直角或钝角
          ans = b;
          return ans;
        }
        if (b * b >= a * a + c * c) {// 组成直角三角形或钝角三角形,p2为直角或钝角
          ans = c;
          return ans;
        }
        // 组成锐角三角形,则求三角形的高
        double p0 = (a + b + c) / 2;// 半周长
        double s = Math.sqrt(p0 * (p0 - a) * (p0 - b) * (p0 - c));// 海伦公式求面积
        ans = 2*s / a;// 返回点到线的距离(利用三角形面积公式求高)
        return ans;
      }
    

    点击这里可以看到作者的其他文章


    相关文章

      网友评论

        本文标题:2D 游戏激光炮实现

        本文链接:https://www.haomeiwen.com/subject/ocqwbxtx.html