Урок 4. Завершающий штрих - слайдер
прокрутки трека
Почему два? Да потому, что один из них должен
будет запускать автоматическое передвижение слайдера, когда
включается воспроизведение, а второй будет определять, что
должно происходить, когда вы захотите вмешаться в этот процесс
и ручками передвинуть слайдер на другое место. Итак, создайте
два объекта сценария в вашем учебном проекте. Первый назовите
AutoMoveTrackSldr, а второй -
MoveTrackSlider.
Но вернемся пока к объекту HotSpotMouse и
назначим ему необходимые действия в окне сценариев. На вкладке
Mouse Down напишите
следующее:
handleoff =
5 posmin = 197 posmax = 390 ypos =
31 mouseup=FALSE ScriptTimer("TimerA=MoveTrackSlider","50")
Здесь определяются значения, о которых мы
говорили выше и которые будут использоваться в скриптах для
вычислений (цифры, естественно, у вас будут свои). А
также, пока мышь нажата, но еще не отпущена, будет запущен
скрипт MoveTrackSlider. Он, в свою очередь,
включит показ "призрака" слайдера и переместит его на позицию
мыши (об этом ниже).
На вкладке Mouse
Up напишите такой сценарий:
mouseup =
TRUE Hide("tracksldr_alpha") MoveObject("tracksldr","x,ypos") AudioRewind("(x-posmin)*((CBK_TotalSec/100)*0.5181)+1","")
А здесь определяется сценарий уже после
отпускания мыши. Что же произойдет? "Призрак" слайдера будет
скрыт, а на позицию мыши будет перемещен сам слайдер. Но
просто переместить движок - этого мало. Нужно еще
"переместить" на соответствующее место воспроизведение песни.
Для этого служит команда AudioRewind, в качестве
параметра которой указывается время в секундах, на которое
должно "перескочить" воспроизведение.
Однако это время нужно еще вычислить. Как? Да
очень просто. Время текущей позиции относится к общему времени
песни так же, как координата текущей позиции трека относится к
общей длине прокрутки трека. Точнее, не координата текущей
позиции, а разница между ней и минимальной позицией. Попробую
объяснить понятнее. Если длина дорожки перемещения слайдера у
вас нарисована в 100 точек, а слайдер переместился на
середину, то воспроизведение нужно переместить в точку, равную
0,5 от общего времени воспроизведения. Если слайдер находится
в десяти точках от правого края, то общее время нужно умножить
на 0,9, а если в десяти от левого - то на 0,1. А общее время
извлекается из объекта CBK_TotalSec, вот для чего он
нужен в проекте.
Поэтому формула для вычисления выглядит так:
разница между текущей и минимальной позицией слайдера делится
на сто и умножается на общее время звучания. Ну а если длина
дорожки не сто точек, то вводится поправочный коэффициент - в
скрипте, показанном выше, это число 0.5181. Чтобы его
рассчитать, нужно число сто разделить на разницу между posmax и
posmin.
Теперь откройте окно сценария скрипта
AutoMoveTrackSldr и скопируйте туда следующий скрипт
(не забудьте изменить числовые значения на свои!):
if (CBK_TimeSec
< CBK_TotalSec)
then Show("tracksldr") MoveObject("tracksldr","197+((100/(CBK_TotalSec))/0.5181)*(CBK_TimeSec)),OBJECTY(tracksldr)") ScriptTimer("AutoMoveTrackSldr","500") end if
(CBK_TimeSec = CBK_TotalSec)
then MoveObject("tracksldr","197,
OBJECTY(tracksldr)") Hide("tracksldr") end
Смысл сценария легко понять. Если текущее время
звучания меньше общей продолжительности звучания песни (первая
строка сценария), то включается показ слайдера (вторая строка)
и он перемещается на позицию согласно текущему времени (третья
строка). Дальше выполняется запуск этого же скрипта через 500
мс, то есть через каждые полсекунды слайдер будет перемещаться
а новую позицию. В следующем условии сценария определяется,
что если текущее время стало равно общему времени (значит,
песня закончилась), то слайдер переносится на начальную
позицию и вновь делается скрытым.
Всё просто и гениально (заслуга не моя -
авт.)
Назад
Дальше
|