2012-08-02 47 views
2

我有一个月球着陆器类型的游戏。我不使用任何物理引擎。 如果您不使用推进器并最终降落在地面上,我的着陆器会不断下降。地面是手绘的,它不是线条,更像是曲线,而地面可以是任何形状或颜色。 如何正确使用碰撞检测及其结果?什么碰撞检测方法用于手绘表面?

+0

重要的一点应当明确:你的游戏允许降落在略微弯曲的表面(例如船舶略微倾斜到与着陆时的表面排列)?或者表面应该完全平坦以便着陆成功? – Mazyod 2012-08-05 18:07:23

+0

@Mazyod着陆荚将是完全平坦的是 – Dvole 2012-08-05 19:39:58

+0

哦,这解释了很多。让我试试看......但是,为了确定,你如何在代码中表示手绘线?我怀疑是否有一系列点连线?物理引擎的 – Mazyod 2012-08-06 02:57:01

回答

3

那么这取决于你想要做什么。我会推荐以下选项之一:

  1. 使用物理引擎。他们在那里寻求某些东西。你可以创建不同的形状。你可以在一个矩形中混合使用,如果它们是直线,或者是很多圆形的曲线等。

  2. 使用你自己的定制圆碰撞检测器。你用一个包围盒大小的圆代表着陆器。然后,对于每个手绘线条,创建一组代表该线条的相邻圆。当你检查你的着陆器位置时,你基本上只是循环代表线条的圆圈并检查碰撞。传入伪

    for (CollisionCircle* circle in collisions) 
    { 
        if (circle.collidesWith(lander.collisionCircle)) 
        { 
         // 1. Calculate edge distance from lander to circle (position + radius distance) 
         // 2. Remove distance from lander position to fix position. 
        } 
    } 
    
+0

(+1)。不过,我认为圈子的想法需要更多的工作。圆的最佳半径是多少?尖锐的边缘怎么样? – Mazyod 2012-08-05 17:02:54

+0

为真。我曾经在一个windows应用程序上工作过,而且这取决于你使用的笔刷。如果你有锋利的边缘,通常是方形的刷子。尺寸同样取决于刷子的大小。 – 2012-08-05 17:26:27

+0

我以圆心为中心? – Dvole 2012-08-05 17:49:08