【问题标题】:Optimizing of game objects placement in a 2D Game优化 2D 游戏中的游戏对象放置
【发布时间】:2013-11-19 23:50:41
【问题描述】:

我正在克隆一个蜈蚣游戏,但现在我正在 PC 上编写它。

我想将蘑菇以随机的位置散布在屏幕上,但它们不应相互重叠。

这样做的最坏情况是 O(N^3) 算法,您检查一个蘑菇是否为其他蘑菇,然后检查距离或交叉点,然后再取另一个最佳随机位置。 使用 Actionscript 的伪代码在这里:

   for (var i:int = 0; i < m_bricks.length - 1; i++)
            {
                for (var j:int = 1; j < m_bricks.length; j++)
                {
                    if (i != j)
                    {
                        while (m_bricks[i].hitTestObject(m_bricks[j]))
                        {
                            m_bricks[i].x = int((Math.random() * 200) + 45);
                            m_bricks[i].y = int((Math.random() * 200) + 45);

                        }
                    }
                }
            }

这在 PC 上当然没问题,但我要把它移植到具有小功率微控制器的游戏机上)。

我知道解决方案是使用 tilemap,但有更好的策略来实现吗?

【问题讨论】:

  • 网格或瓦片地图是保证比 O(n^3) 时间更快的唯一方法。唯一的另一种方法是存储实例化对象坐标的数组并进行简单检查以确保您的点与该数组中的任何点都不太接近。如果操作正确,那可能是 O(n) 或 O(n^2)。瓦片地图当然会保证 O(n)。

标签: algorithm embedded


【解决方案1】:

您可以使用linear congruential generator (LCG) 来执行此操作,这是一种在有限范围内生成明显随机数的长序列的简单方法。

基本公式是xn+1 = (a·xn + c) mod m.

已经表明,只要满足certain conditionscm 互质,a–1 能被 m 的所有质因数整除,如果 m 是倍数为 4,则 a–1 也必须是 4) 的倍数。

如果您使 m 等于您的游戏区域的大小(宽度×高度),那么这将为您提供一系列坐标,这些坐标在完成所有可能性之前不会重复覆盖。这意味着完全没有必要检查与其他蘑菇的碰撞。您可以简单地通过使用不同的“种子”值 x0 (0 ≤ x0 m).

例如,如果您的游戏区域由 200×200 个单元格组成,您可以设置 m=40000、a=14081 和 c=15207。在 C 语言中,您的代码如下所示:

/** LCG parameters for m = 40000: **/
#define LCG_MODULUS    40000  /* m */
#define LCG_MULTIPLIER 14081  /* a */
#define LCG_INCREMENT  15207  /* c */

int lcg(int arg) {
  static int x = 0;
  if (!arg) return x;      /* arg=0: return last value */
  if (arg < 0) x = -arg;   /* arg=-n: seed with value of n */
  x = (LCG_MULTIPLIER * x + LCG_INCREMENT) % LCG_MODULUS;
  return x;
}

  :

/* Get new random coordinates */
r = lcg(1);
x = r % 200;
y = r / 200;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多