У меня есть 2 сопрограммы IEnumerator, которые достаточно похожи, чтобы их можно было комбинировать:
A:
IEnumerator CountDown_A() {
timeLeft_A = totalTime_A;
while (timeLeft_A > 0) {
yield return new WaitForSeconds(1);
timeLeft_A--;
}
}
B:
IEnumerator CountDown_B() {
timeLeft_B = totalTime_B;
while (timeLeft_B > 0) {
yield return new WaitForSeconds(1);
timeLeft_B--;
}
}
Только 2 различияпеременные totalTime_A
против totalTime_B
и timeLeft_A
против timeLeft_B
.Эти переменные находятся вне области действия этой функции.
Проблема, с которой я имею модульную структуру этой сопрограммы, заключается в том, что увеличенные значения timeLeft_A
и timeLeft_B
должны применяться вне этой функции, поэтому мне нужно как-то передать ссылку на них.
Пользователь "Kurt-Dekker" опубликовал отличное решение в этой теме , но у меня возникли проблемы с применением его к моему коду.Он говорит «использовать замыкание (функтор), чтобы позволить сопрограмме изменить его с помощью обратного вызова»:
IEnumerator CountDown( System.Action<int> callback){
....
}
, который, я думаю, будет назван так:
StartCoroutine ( CountDown( (i) => { timeLeft_A = i; } ) );
StartCoroutine ( CountDown( (i) => { timeLeft_B = i; } ) );
Что яЯ не понимаю, как потом ссылаться / изменять фактическое значение передаваемого int внутри IEnumerator, если все, с чем мне нужно работать - это функция обратного вызова.Например, чтобы сделать следующее:
while(callback > 0){
или:
callback--;
Любая помощь приветствуется.