宝石迷阵克隆火焰宝石向上运动的烦恼

时间:2014-10-23 19:20:18

标签: c# xna

所以,这是一个有趣的问题。我正在制作一个带有额外东西的宝石迷阵3克隆,我无法弄清楚如何使火焰宝石爆炸上方的宝石向上移动;中间的柱子向上移动得比外面的两个柱子更远(正常的火焰宝石爆炸是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是坐标火焰宝石爆炸的中心。

我应该提到的另一件事是视觉位置与Gem数组​​中的位置(gems [,])是分开的,并且视觉位置是y,x而gem数组是x,y。我不知道这是怎么出现的,但修复它会非常密集。

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

如果您需要更多信息,请说明。这是我第一次在这里发帖提问,所以如果我错过了什么,请告诉我。

1 个答案:

答案 0 :(得分:0)

好的,所以我终于明白了。耶和华坚持!这是代码:

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。我还没有修复交换的视觉位置/阵列位置。我可能会在将来这样做。