所以,这是一个有趣的问题。我正在制作一个带有额外东西的宝石迷阵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中的值。
如果您需要更多信息,请说明。这是我第一次在这里发帖提问,所以如果我错过了什么,请告诉我。
答案 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。我还没有修复交换的视觉位置/阵列位置。我可能会在将来这样做。