/potapenko.com/articles/conveyor (part 4)/

Conv.stop

В коде рулетки есть несколько недочетов. Нам нужно всегда знать, сколько продлится то или иное действие. Почему именно по пятьдесят кадров на анимацию проигрыша для ставки. А для выигрыша точно сто. Ведь расстояние от стартового до финального положения у каждой ставки – разное. На нас опять накладываются ограничения.

Механизм конвейера предлагает на этот счет следующие решения:

Первое

Не задавать значение паузы для такого действия явно. Почему бы не остановить конвейер, когда действие начнет выполняться, а когда действие закончится, то компонент, который совершает действие, отрапортует, что действие закончил. Просто запустит конвейер.

То есть, когда компонент выполняет действие, он останавливает конвейер, а когда закончил, то запускает конвейер, и начнет выполняться следующее действие.

Опишем эти методы для остановки и запуска конвейера:

Conv.stop


Conv.stop();

Description

Метод останавливает конвейер. Никакие действия не выполняются. Новые действия могут быть помещены в конвейер, но не будут выполняться.

Usage


Conv.stop()

Conv.play


Conv.play();

Description

Метод запускает конвейер.

Usage


Conv.play()

В соответствии с данным решением перепишем код рулетки.

Нам будет нужно отказаться от методов looses и wins. И в цикле перебрать ставки и вызвать у них методы выигрыша-проигрыша.

private function spin() 
{
this.lock();

// вычислить игровой результат
this.createGameResult();

// начать движение колеса
// (время 100 кадров)
Conv.put(this, "startWeel", "100");

// остановить колесо
Conv.put(this, "stopWeel", 0);

// озвучить игровой результат
// время - две секунды
Conv.put(this, "gameSounds", 2000);

// анимационно убрать
// проигравшие ставки
for ( var i=0; i<this.looses_array.length; i++)
{
Conv.put(this.looses_array[i], "loose", 0);
}

// анимационно показать
// выигрыш у каждой ставки
for ( var i=0; i<this.wins_array.length; i++)
{
Conv.put(this.wins_array[i], "win", 0);
}

// разблокировать интерфейс // игрового приложения
Conv.put(this, "unlock", 0)
}

Как видно из данного кода, мы не указываем время выполнения анимации выигрыша-проигрыша у ставок. Мы просто помещаем их в список конвейера. Но они сами «знают», сколько продлится их работа, и выполнят всю работу слаженно и последовательно.

Уже лучше. В данном случае это работает. Но по сравнению с первым вариантом, код немного потерял ясность. Да, не все проблемы можно решить просто остановкой и стартом конвейера.

Предыдущая часть | Следующая часть
[1] [2] [3] [4] [5] [6] [7]