镶有宝石的克隆人火焰宝石向上移动的麻烦



所以,这是一个有趣的问题。我正在用额外的东西制作一个Bejewelded3克隆,我不知道如何让火焰宝石爆炸上方的宝石向上移动;中柱向上移动的距离比外两柱更远(正常火焰宝石爆炸为3x3)。

这是我迄今为止的代码:

for (int gy = i - 1; gy <= i + 1; gy++)
{
    if (gy >= 0 && gy < gems.GetLength(0))
    {
        for (int gx = j; gx >= 0; gx--)
        {
            if (gy == i)
            {
                gems[gy, gx].MoveTowardsPosition(gems[gx, gy].Position.Swap() + new Vector2(0, -70), gemMoveSpeed * 1.8f, true, softMove: true);
            }
            else gems[gy, gx].MoveTowardsPosition(gems[gx, gy].Position.Swap() + new Vector2(0, -45), gemMoveSpeed * 1.8f, true, softMove: true);
        }
    }
}

MoveTowardsPosition()方法在其他地方也能很好地工作。这不是问题所在。问题是,我无法让宝石向上移动(并且在正确的位置;即,它们要么奇怪地侧向移动,要么在错误的位置向上移动。此外,I和j是火焰宝石爆炸中心的坐标。

我可能应该提到的另一件事是,视觉位置与宝石阵列中的位置(宝石[,])是分开的,视觉位置是y,x,而宝石阵列是x,y。我不知道这是怎么发生的,但修复它会非常困难。

哦,Swap()扩展方法只是交换Vector2中的值。

如果你需要更多信息,就直接说出来。这是我第一次在这里发布问题,所以如果我遗漏了什么,请告诉我。

好吧,所以我终于想通了。谢谢你的坚持!这是代码:

for (int gy = j - 1; gy <= j + 1; gy++)
{
    if (gy >= 0 && gy < gems.GetLength(0))
    {
        for (int gx = i; gx >= 0; gx--)
        {
            if (gy == j)
            {
                gems[gx, gy].MoveTowardsPosition(gems[gy, gx].Position.Swap() + new Vector2(0, -70), gemMoveSpeed * 1.8f, true, softMove: true);
            }
            else gems[gx, gy].MoveTowardsPosition(gems[gy, gx].Position.Swap() + new Vector2(0, -45), gemMoveSpeed * 1.8f, true, softMove: true);
            moveTimer = 0;
        }
    }
}

事实证明,我不仅要反转gy和gx,还要反转I和j。我还没有修复交换的视觉位置/阵列位置。我将来可能会那样做。

最新更新