В игровом автомате каждая колонка останавливается одна за другой?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 В игровом автомате каждая колонка останавливается одна за другой?

Сообщение Anonymous »

Это то, что у меня сейчас есть, оно постепенно замедляется и прекращает эффект вращения. Дело в том, что, как в настоящем игровом автомате, я бы хотел, чтобы каждый столбец останавливался один за другим слева направо. Когда один замедляется/останавливается, остальные тем временем должны продолжать вращаться. Но я не могу хоть убей заставить это работать вообще. Я довольно новичок в разработке игр, особенно в таких вещах, как сопрограммы, перечислитель и т. д. Я пробовал несколько LLM, таких как Chatgpt и Copilot, но их реализации всегда полностью останавливают другие столбцы, которые я называю «барабанами» в моем сценарии, а затем по какой-то причине повторно вращаю их. , вместо того, чтобы продолжать зацикливать их до тех пор, пока не придет время замедляться и останавливаться, один за другим слева направо.
Я использую переменную полного цикла, вращение начинает замедляться и остановиться после 6 полных петель. Я хотел бы реализовать это таким образом, чтобы левый конец останавливался после 6 циклов, средний после 7, правый после 8. Просто вообще не могу этого понять. Если бы кто-нибудь мог мне помочь, я был бы очень признателен.

Код: Выделить всё

private IEnumerator SpinReels()
{
isSpinning = true;
float distanceCovered = 0f;

// Calculate the total distance to spin for the specified number of loops
float totalDistance = fullLoops * reelSymbols[0].Length * symbolHeight;

// Spin until the distance covered reaches total distance
while (distanceCovered < totalDistance)
{
foreach (var reel in reelSymbols)
{
foreach (GameObject symbolObj in reel)
{
RectTransform symbol = symbolObj.GetComponent();

// Move the symbol upwards based on current spin speed and delta time
symbol.anchoredPosition += new Vector2(0, spinSpeed * Time.deltaTime);

// Wrap symbols back to the bottom once they move beyond the top
if (symbol.anchoredPosition.y > (reel.Length * symbolHeight) / 2f)
{
symbol.anchoredPosition -= new Vector2(0, reel.Length * symbolHeight);
}
}
}

// Calculate distance covered
distanceCovered += spinSpeed * Time.deltaTime;

yield return null; // Wait for the next frame
}

// Gradually slow down after completing full loops
while (spinSpeed > 0)
{
foreach (var reel in reelSymbols)
{
foreach (GameObject symbolObj in reel)
{
RectTransform symbol = symbolObj.GetComponent();

// Move the symbol upwards based on current spin speed and delta time
symbol.anchoredPosition += new Vector2(0, spinSpeed * Time.deltaTime);

// Wrap symbols back to the bottom once they move beyond the top
if (symbol.anchoredPosition.y > (reel.Length * symbolHeight) / 2f)
{
symbol.anchoredPosition -= new Vector2(0, reel.Length * symbolHeight);
}
}
}

// Gradually decrease speed
spinSpeed -= slowdownRate * Time.deltaTime;

yield return null; // Wait for the next frame
}

// Ensure we stop completely
spinSpeed = 0;

isSpinning = false;
Ch
eckForMatches(); // Проверка совпадений после завершения вращения


Подробнее здесь: https://stackoverflow.com/questions/790 ... er-another
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»