PDA

Просмотр полной версии : управление 3мя movie clipами


manuscripti
14.01.2010, 06:09
есть ТРИ movie clipа
при нажатии кнопки нужно проиграть клипы в последовательности 1,2,3
при нажатии другой кнопки нужно проиграть их обратно 3,2,1
movie клипы находят в библиотеке
то есть как их кинуть на экран по нужным координатам и проиграть?
желательно чтобы между клипами не было видно "склейки" - все шло непрерывно - сами клипы идут непрерывно

Bankomat
14.01.2010, 09:19
мб разместить их в 3х разных кадрах, и в каждом кадре установить стоп
а кнопки просто перескакивать будут по кадрам

первые три кадра расположить в порядке 123 в конце 3 кадра стоп
потом следующие три кадра расположить 321 в конце кадра 6 стоп
=)

manuscripti
14.01.2010, 09:39
уточню
123 - персонажная анимация - то есть кнопка всегда находится в другом слое
то есть потом нужно играть 1234
или 1278
где 2 например будет некий центральный кадр - то ест всем должен управлять as

mooncar
14.01.2010, 11:06
Не нужно никаких кадров, есть ведь AS.
Создайте массивы сценариев, где опишите переходы:
var mode1:Array = [1, 2, 3];
var mode2:Array = [3, 2, 1];

Делайте аттач нужных мувиков в зависимости от сценария, то есть по значениям из массивов.
В конце каждого ролика должен быть записан вызов функции смены мувика.
Что-то такое:


//Сценарии последовательностей вызова мувиков с анимацией. Нулевой элемент - заглушка, не рабочий.
//Следующие - рабочие номера мувиков (идентификаторов в библиотеке)
var mode1:Array = [0, 1, 2, 3];
var mode2:Array = [0, 3, 2, 1];

var playMode:Number ; //текущий сцеарий
var currentStep:Number = 0; //текущий шаг анимации

btn1.onRelease = function () {
playMode = 1;
manageAnim ();
};

btn2.onRelease = function () {
playMode = 2;
manageAnim ();
};

function manageAnim () {
currentStep++;
//удаляем старый мувик на сцене
var itemToRemove:String = 'mc' + (currentStep - 1); //находим имя предыдущего мувика на сцене для удаления
this[itemToRemove].removeMovieClip(); //удаляем

//добавляем новый мувик на сцене
var itemToPlace:String = 'mc_id' + this['mode' + playMode][currentStep];//вычисляем id след. мувика в библиотеке
var instanseName = 'mc' + currentStep;
this.attachMovie(itemToPlace, instanseName, this.getNextHighestDepth(), {_x:100, _y:100});
}

//ВАЖНО! Внутри каждого мувика-анимации в последнем кадре должен стоять вызов функции:
// _parent.manageAnim();

Смотрите пример. Обратите внимание на:
- в библиотеке идентификаторы связывания (Правой кнопкой на мувике - "Linkage").
- код последнего кадра мувиков...

mooncar
14.01.2010, 11:10
Если что, то в конце сценария нужно обнулять счетчик currentStep, чтобы можно было запустить другой или тот же сценарий заново.
Для этого в функции нужно проверку на существование очередного элемента текущего сценарного массива сделать. Если там есть элемент-номер, то все как обычно, если нет - то currentStep = 0 и никаких действий.. ну или надпись выводить "Конец", или переход еще куда-то на ваше усмотрение...

manuscripti
14.01.2010, 11:25
как грамотно сделать - чтобы при проигрывании сценария его координату x например можно было менять? - к пример он должен приближаться к тому месту где был щелчок мышки?

mooncar
14.01.2010, 11:30
Типа тогда так:
this.attachMovie(itemToPlace, instanseName, this.getNextHighestDepth(), {_x:_xmouse, _y:_ymouse});
Вообще про щелчки мышкой вы ничего не говорили. Код выше просто будет размещать очередной мувик в текущих координатах мыши. Если мышь уводится - там и будет очередной.

manuscripti
14.01.2010, 11:30
и как например сделать
играет к примеру сценарий 1234567
во время 5 клипа произошел щелчок мыши и нужно начать играть сценарий 5,10,20,55

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

mooncar
14.01.2010, 11:46
Как переключаться между режимами - это вы сами придумайте, я не знаю, что там у вас.
var mode1:Array = [0, 1, 2, 3];
var mode2:Array = [0, 3, 2, 1];
var playMode:Number; //текущий сцеарий
var currentStep:Number = 0; //текущий шаг анимации


this.onMouseDown = function () {
this['mc' + currentStep].removeMovieClip(); //удаляем последний мувик из старой последовательности
x0 = _root._xmouse;
y0 = _root._ymouse;
currentStep = 0;
playMode = 1; //вот тут нужно задавать номер сценария - примерно как- я написал в конце
manageAnim ();
}

function manageAnim () {
currentStep++;
//удаляем старый мувик на сцене
var itemToRemove:String = 'mc' + (currentStep - 1); //находим имя предыдущего мувика на сцене для удаления
this[itemToRemove].removeMovieClip(); //удаляем
//добавляем новый мувик на сцене
var itemToPlace:String = 'mc_id' + this['mode' + playMode][currentStep];//вычисляем id след. мувика в библиотеке
if (this['mode' + playMode][currentStep]) {
var instanseName = 'mc' + currentStep;
this.attachMovie(itemToPlace, instanseName, this.getNextHighestDepth(), {_x:x0, _y:y0});
}
else {
currentStep = 0;
}
}
Еще раз повторюсь - принцип смены режимов - за вами. Делать это нужно внутри функции onMouseDown по известному вам алгоритму.. Создайте еще один глобальный сценарный массив, в котором держите уже соответствия "какой проигрывается мувик сейчас - какой соответствует ему номер mode при щелчке мыши", и меняйте mode внутри onMouseDown.
Надеюсь, идею вы поняли.

manuscripti
14.01.2010, 12:12
спасибо буду разбираться