`

像素级碰撞算法1

阅读更多
boolean isCollisionPolygon(int[] xPoints, int[] yPoints, int posx, int posy) {
    int i, j;
    int y;
    int miny, maxy;
    int x1, y1;
    int x2, y2;
    int ind1, ind2;
    int ints;
    int[] polyInts;
    int nPoints = xPoints.length;
    if (nPoints < 3) {
      return false;
    }
    polyInts = new int[nPoints];
    miny = yPoints[0];
    maxy = yPoints[0];
    for (i = 1; i < nPoints; i++) {
      if (yPoints[i] < miny) {
        miny = yPoints[i];
      }
      else if (yPoints[i] > maxy) {
        maxy = yPoints[i];
      }
    }
    for (y = miny; y <= maxy; y++) {
      ints = 0;
      for (i = 0; i < nPoints; i++) {
        if (i == 0) {
          ind1 = nPoints - 1;
          ind2 = 0;
        }
        else {
          ind1 = i - 1;
          ind2 = i;
        }
        y1 = yPoints[ind1];
        y2 = yPoints[ind2];
        if (y1 < y2) {
          x1 = xPoints[ind1];
          x2 = xPoints[ind2];
        }
        else if (y1 > y2) {
          y2 = yPoints[ind1];
          y1 = yPoints[ind2];
          x2 = xPoints[ind1];
          x1 = xPoints[ind2];
        }
        else {
          continue;
        }
        if ( (y >= y1) && (y < y2)) {
          polyInts[ints++] = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
        }
        else if ( (y == maxy) && (y > y1) && (y <= y2)) {
          polyInts[ints++] = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
        }
      }
      for (i = polyInts.length; --i >= 0; ) {
        for (j = 0; j < i; j++) {
          if (polyInts[j] > polyInts[j + 1]) {
            int T = polyInts[j];
            polyInts[j] = polyInts[j + 1];
            polyInts[j + 1] = T;
          }
        }
      }
      for (i = 0; i < ints; i += 2) {
        if (posy == y) {
          if (posx >= polyInts[i] && posx <= polyInts[i + 1]) {
            return true;
          }
        }
      }
    }
    return false;
  }

 

boolean isCollisionPolygon(int[] xPoints, int[] yPoints, int posx, int posy)
使用方法.
xPoints,是多边形的X坐标,yPoints是Y坐标
posx,posy是那个要检测点的坐标

 

分享到:
评论

相关推荐

    像素碰撞检测源码

    在这个场景中,"像素碰撞检测源码"是指使用Cocos2d-x框架实现的像素级别的碰撞检测算法。 传统的碰撞检测方法通常基于矩形或圆形等简单的几何形状,但这种方法无法精确处理复杂形状的物体。像素碰撞检测则更加精确...

    基于距离的碰撞算法

    基于距离的碰撞算法是一种优化过的碰撞检测方法,尤其适合于地图区域相对较小的游戏场景。这类算法通常比传统的矩形或圆形碰撞检测更为精确,能够处理更复杂的形状,并且计算效率相对较高。 **基于距离的算法基础**...

    矩阵碰撞算法

    1. **应用范围**:矩阵碰撞算法适用于2D场景,如像素艺术游戏、物理引擎等。对于3D环境,通常需要使用更加复杂的碰撞检测技术,如包围盒(AABB)、OBB(轴对齐包围盒)或球体碰撞。 2. **优化**:为了进一步提高...

    JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解

    像素碰撞检测的原理是检查两个精灵的像素点是否有重叠。每个像素点由RGBA四个数据组成,其中A代表alpha值,即透明度。当两个精灵的像素点透明度都不为0时,就意味着在这些像素点上发生了碰撞。 实现像素碰撞检测的...

    flash 像素碰撞

    1. **像素碰撞原理**:基本思想是遍历两个对象重叠区域内的每个像素,检查它们在颜色缓冲区中的值。如果发现有颜色差异,那么就可以认为发生了碰撞。这种方法对于处理复杂形状或透明对象的碰撞非常有效,因为传统的...

    AS3.0像素级别精确检测碰撞

    5. **多边形碰撞**:如果需要检测复杂形状,可以将位图转换为多边形,然后使用更高效的几何碰撞算法。 通过这样的自定义类,开发者可以实现更复杂的碰撞检测逻辑,提高游戏或其他互动应用的精确性和用户体验。在...

    3D游戏中常用算法 如碰撞检测 A* 四叉树 BSP分割树 地形LOD等等

    1. **碰撞检测**:碰撞检测是确保游戏对象间互动准确性的基础。有多种方法实现,如轴对齐包围盒(AABB)、球体碰撞(Sphere Collisions)和面向切面包围体(OBB)。更高级的算法如GJK(Gjk)和SAT(Separating Axis ...

    AS3.0高级碰撞检测

    位图的碰撞检测是Flash开发中的一个重要技术,尤其在游戏制作和交互式应用程序中不可或缺。...然而,要注意的是,高效的碰撞检测往往需要对算法和数据结构有深入的理解,以便在保证精度的同时,尽可能减少计算开销。

    flash 碰撞

    在Flash中,常见的碰撞检测方法包括矩形碰撞检测(Rectangular collision)、精确形状碰撞检测(Exact shape collision)以及像素级碰撞检测(Pixel-perfect collision)。 2. **矩形碰撞检测**: 这是最简单也最...

    一种基于GPU的碰撞检测算法.pdf

    【基于GPU的碰撞检测算法】 在计算机图形学和虚拟现实应用中,碰撞检测是一个至关重要的基础组件,广泛应用于虚拟制造、CAD/CAM、动画、物理模拟、游戏等多个领域。传统的碰撞检测算法通常在物体空间中实现,依赖于...

    Android游戏开发之碰撞检测(矩形碰撞、圆形碰撞、像素碰撞)

    本篇文章主要探讨了三种基本的碰撞检测方法:矩形碰撞、圆形碰撞以及像素碰撞,并且涉及到了多矩形碰撞的处理。 1. **矩形碰撞检测**: 矩形碰撞检测通常用于简单形状的游戏对象,例如平台跳跃类游戏中的角色和...

    程序中几何图形间的距离计算(碰撞检测)

    6. **像素碰撞**(J2ME 中的): - 在J2ME这样的移动平台开发中,可能需要像素级别的碰撞检测,这通常涉及到逐像素比较两个图像或颜色区域。 7. **直线与矩形碰撞**: - 检测一条直线是否与矩形的边界有任何交点...

    flash游戏开发第一张 高级碰撞检测

    - 调用`hitTest`函数比较`bmp1`和`bmp2`,如果有像素重叠则返回`true`。 #### 四、实例分析 假设我们有两个复杂的不规则图形,需要检测它们之间的碰撞: 1. **创建不规则图形**: - 可以通过随机绘制线条或使用...

    visual c++ vc开发编写2d游戏之 游戏场景移动及像素碰撞 源码 用的gdi没用directx

    `vc+gdi没用directx.txt`可能包含了项目的整体结构和GDI相关的函数调用,而"场景移动+像素碰撞"可能是具体的实现细节,比如移动函数和碰撞检测算法。 六、实际应用 尽管DirectX在游戏开发中更为常见,因为它提供了...

    DirectDraw简单碰撞检测

    在DirectDraw中,可以利用GDI函数或者自定义的像素级扫描算法实现这种检测。 2. **近似碰撞检测**:对于更复杂的形状,如多边形,可能需要使用更高级的技术,如分离轴定理(Separating Axis Theorem,SAT)。该定理...

    碰撞检测(毕业论文)

    - **像素着色器**:在像素着色阶段进行更精细的碰撞检测。 #### 碰撞检测算法的优化 为了提高游戏的实时性和流畅性,对碰撞检测算法进行优化至关重要。以下是一些常用的优化策略: - **层次包围盒**:使用多层...

    Java实现的碰撞检测代码-测试小球碰撞边缘.rar

    我们将深入探讨这个Java实现的碰撞检测算法以及如何在canvas对象上应用。 首先,`canvas`是HTML5的一个核心元素,允许开发者在网页上进行动态图形绘制。在Java中,我们可以使用JavaFX或者Swing库来创建一个类似的...

    Bresenham的圆生成算法

    例如,你可以使用这些算法来创建简单的2D游戏中的碰撞检测,或者在图像处理中进行几何变换。 总之,Bresenham算法在图形学中扮演着重要的角色,通过理解和应用这些算法,开发者能够高效地在像素级别的离散设备上...

Global site tag (gtag.js) - Google Analytics