2.4.x版本跳一跳问题请教

2.4使用skew,判断是否站在方块上面。但是skew这个功能启用了,还有别的方法吗

image
image

/**

  • 判断一个点是否在一个三角形内部

  • @param A 三角形的第一个顶点坐标

  • @param B 三角形的第二个顶点坐标

  • @param C 三角形的第三个顶点坐标

  • @param P 待判断的点的坐标

  • @returns 如果点在三角形内部,返回 true,否则返回 false
    /
    private isPointInTriangle(A: number[], B: number[], C: number[], P: number[]): boolean {
    /
    *

    • 计算两个二维向量的叉积
    • @param v1 第一个向量
    • @param v2 第二个向量
    • @returns 两个向量的叉积
      */
      const vectorCross = (v1: number[], v2: number[]) => {
      // 叉积的计算公式:v1[0] * v2[1] - v1[1] * v2[0]
      return v1[0] * v2[1] - v1[1] * v2[0];
      };

    // 计算向量 AB、AP、BC、BP、CA、CP
    const AB = [B[0] - A[0], B[1] - A[1]];
    const AP = [P[0] - A[0], P[1] - A[1]];
    const BC = [C[0] - B[0], C[1] - B[1]];
    const BP = [P[0] - B[0], P[1] - B[1]];
    const CA = [A[0] - C[0], A[1] - C[1]];
    const CP = [P[0] - C[0], P[1] - C[1]];

    // 计算叉积
    const cross1 = vectorCross(AB, AP);
    const cross2 = vectorCross(BC, BP);
    const cross3 = vectorCross(CA, CP);

    // 判断点是否在三角形内部
    // 如果点在三角形内部,那么三个叉积的符号应该相同(要么都是正数,要么都是负数)
    return (cross1 >= 0 && cross2 >= 0 && cross3 >= 0) || (cross1 <= 0 && cross2 <= 0 && cross3 <= 0);
    }
    判断坐标是否在两个三角形内就行吧

1赞

搜嘎搜嘎,感谢

2d引擎做菱形的地图,不就是有node坐标转菱形格子,菱形格子转node坐标。你用这个判断也行。

图形学大佬啊

…问下ai就好了

//判断坐标是否在菱形范围内
let inRange = Math.abs(x * height) + Math.abs(y * width) <= height * width / 2;