【发布时间】:2021-03-20 10:57:05
【问题描述】:
int Partition(GameObject[] list, int left, int right)
{
GameObject pivot = list[right];
//GameObject temp;
int i = left - 1;
for (int j = left; j <= right - 1; j++)
{
if (list[j].transform.position.y <= pivot.transform.position.y)
{
i++;
StartCoroutine(Swap(list, i, j));
}
}
StartCoroutine(Swap(list, i+1, right));
return i + 1;
}
IEnumerator Swap(GameObject[] list, int i, int j)
{
temp = list[i];
list[i] = list[i+1];
list[i+1] = temp;
LeanTween.color(list[i], Color.red, 1f);
LeanTween.color(list[i+1], Color.red, 1f);
yield return new WaitForSeconds(1.5f);
LeanTween.color(list[i], Color.white, 1f);
LeanTween.color(list[i+1], Color.white, 1f);
tempPosition = list[i].transform.localPosition;
LeanTween.moveLocalX((list[i]), list[i+1].transform.localPosition.x, 1);
LeanTween.moveLocalZ(list[i], -3, .5f).setLoopPingPong(1);
LeanTween.moveLocalX((list[i+1]), tempPosition.x, 1);
LeanTween.moveLocalZ(list[i+1], 3, .5f).setLoopPingPong(1);
}
void QuickSort(GameObject[] list, int left, int right)
{
int pivot;
if(left < right)
{
pivot = Partition(list, left, right);
QuickSort(list, left, pivot - 1);
QuickSort(list, pivot + 1, right);
}
}
我正在尝试使用协程在每次交换之间添加延迟,因为没有“Waitforseconds”,所有值都会同时移动,即使通过调试对数组进行排序,它们也会最终出现在错误的位置。我还注意到 StartCoroutine 之后的代码继续运行,也许这就是它们最终出现在错误位置的原因。我只是想知道如果有一个 Coroutine 的替代方案,我可以在 LeanTween 循环期间暂停整个事情。或者我以错误的方式使用协程。提前致谢。
【问题讨论】:
-
恕我直言简化您的协同程序,因此它负责一个对象。我猜不同的实例正在覆盖彼此的变化。