PDA

Просмотр полной версии : прокручивание ролика в обоих временных направлениях


Zhihar
27.11.2007, 07:50
Приветствую
У меня стоит следующая задача:

* есть 20 кадров ролика (вращение 3D объекта - сделано через 20 jpeg кадров)
* есть 2 кнопки "назад" и "вперед"

надо чтобы когда пользователь нажимал кнопку назад ролик прокручивался назад, а нажимая кнопку вперед - ролик прокручивался вперед

на некоторых кадрах ролик должен останавливаться чтобы вывести некоторую дополнительную информацию

Я сделал следующим образом
1) добавил слой команд и в каждом кадре сделал stop();
2) добавил второй слой команд, общий для всех 20 кадров и
* вписал туда глобальную переменную var g_bIsForwardDir:Boolean = true
* код для перемотки ролика вперед или назад через определенные промежутки времени черех nextframe() и prevframe()
3) на кнопки навесил код который при нажатии изменяет переменную g_bIsForwardDir в ту или иную сторону

Все работает, но мне кажется что это излишне коряво и можно обойтись более элегантными и правильными способами,
Например мне очень не нравится 20 команд stop();

подскажите как правильно сделать

Skriv
27.11.2007, 09:30
Думаю setInterval();

Zhihar
27.11.2007, 09:44
а что setInterval() ?

у меня вот такой код получился

var g_bIsForwardDirection:Boolean = true;

// временная задержка между кадрами
var g_nFramesDelay:Number = 125;

var g_nOldTimer:Number = getTimer();

// массив кадров на которых ролик должен останавливаться
var g_pInfoFrames:Array = Array(92, 97, 102, 107);

// позиция ключевового кадра
var g_nInfoFrameID:Number = 0;

this.onEnterFrame = function()
{
if (g_bIsForwardDirection == true)
{
var nLastFrame:Number;

if (g_nInfoFrameID < g_pInfoFrames.length)
nLastFrame = g_pInfoFrames[g_nInfoFrameID];
else
nLastFrame = 112;

if (_currentframe < nLastFrame)
{
if (getTimer() - g_nOldTimer >= g_nFramesDelay)
{
g_nOldTimer = getTimer();

if (_currentframe < 111)
nextFrame();
else
{
g_nInfoFrameID = 0;
gotoAndStop(92);
}
}
}
}
else
{
if (_currentframe > g_pInfoFrames[g_nInfoFrameID])
{
if (getTimer() - g_nOldTimer >= g_nFramesDelay)
{
g_nOldTimer = getTimer();
prevFrame();
}
}
}
}


и на кнопках


on(release)
{
g_bIsForwardDirection = true;

if (_currentframe >= 111)
{
g_nInfoFrameID = 0;
gotoAndStop(92);
}
else
{
g_nInfoFrameID ++;
nextFrame();
}
}



on(release)
{
g_bIsForwardDirection = false;

if (_currentframe <= 92)
{
g_nInfoFrameID = g_pInfoFrames.length - 1;
gotoAndStop(111);
}
else
{
g_nInfoFrameID --;
prevFrame();
}
}


кажется довольно громоздким :-(