所以,这是一个有趣的问题。我正在用额外的东西制作一个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。我还没有修复交换的视觉位置/阵列位置。我将来可能会那样做。