Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   управление кадрами (http://www.flasher.ru/forum/showthread.php?t=202294)

kirill1989 08.07.2013 15:32

управление кадрами
 
Всем доброго времени суток. Есть Movieclip который имеет 40 кадров, есть кнопка которая при нажатии делает переход по этим кадра. Вопрос в том, возможно ли создать внешний xml файл который указывает на активность того или иного кадра, и как в actionscript вписать такой код который на основании полученных данных из xml будет переходить на указанные (активные) кадры а не активные перепрыгивать?

belv 08.07.2013 18:16

По идее можно такое реализовать.Я думаю для этого нужно создать массив с (активными) кадрами,а потом производить переход по элементам массива.
Код AS3:

var Array = new Array();//сюда будут записываться активные кадры
var i:int = 0;
addEventListener(Event.ENTER_FRAME, enterFrameListener);
function enterFrameListener(e:Event):void
{
mc.gotoAndStop(Array[i]);
i++;
}

Может я не прав и есть другие варианты.Но это первое , что пришло.

kirill1989 12.07.2013 13:22

Цитата:

Сообщение от belv (Сообщение 1140524)
По идее можно такое реализовать.Я думаю для этого нужно создать массив с (активными) кадрами,а потом производить переход по элементам массива.
Код AS3:

var Array = new Array();//сюда будут записываться активные кадры
var i:int = 0;
addEventListener(Event.ENTER_FRAME, enterFrameListener);
function enterFrameListener(e:Event):void
{
mc.gotoAndStop(Array[i]);
i++;
}

Может я не прав и есть другие варианты.Но это первое , что пришло.

Я извиняюсь за может глупый вопрос, но как можно занести кадры в массив? Каким способом?

tsarapkabel 12.07.2013 13:54

Предположим такой Xml:
Код:

var myXml:XML =
                                <frames>
                                        <frame num="1" active="true"/>
                                        <frame num="2" active="true"/>
                                        <frame num="3" active="false"/>
                                        <frame num="4" active="false"/>
                                        <frame num="5" active="true"/>
                                </frames>;

Читаем его, записываем номера кадров (не сами кадры, а только номера):
Код AS3:

var currFrame:uint = 0;
 
var needToWrite:String = "true";
var arrayOfFrames:Array = new Array();
 
 
for each(var frame:XML in myXml.frame)
{
        if (frame.@active == needToWrite)
        {
                arrayOfFrames.push(frame.@num);
        }
}

Затем переходим по кадрам:
Код AS3:

mc.gotoAndStop(arrayOfFrames[currFrame]);
currFrame++;


kirill1989 12.07.2013 17:11

Цитата:

Сообщение от tsarapkabel (Сообщение 1140857)
Предположим такой Xml:
Код:

var myXml:XML =
                                <frames>
                                        <frame num="1" active="true"/>
                                        <frame num="2" active="true"/>
                                        <frame num="3" active="false"/>
                                        <frame num="4" active="false"/>
                                        <frame num="5" active="true"/>
                                </frames>;

Читаем его, записываем номера кадров (не сами кадры, а только номера):
Код AS3:

var currFrame:uint = 0;
 
var needToWrite:String = "true";
var arrayOfFrames:Array = new Array();
 
 
for each(var frame:XML in myXml.frame)
{
        if (frame.@active == needToWrite)
        {
                arrayOfFrames.push(frame.@num);
        }
}

Затем переходим по кадрам:
Код AS3:

mc.gotoAndStop(arrayOfFrames[currFrame]);
currFrame++;



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

belv 12.07.2013 17:21

Нужно
mc.gotoAndStop(arrayOfFrames[currFrame]);
currFrame++;
поместить в обработчик события EnterFrame , чтобы переход по кадрам происходил каждый кадр.
А так у вас получается , что вы нажали на кнопку и вызвали mc.gotoAndStop() (перейти и остановиться на определенном кадре).

kirill1989 12.07.2013 18:15

Цитата:

Сообщение от belv (Сообщение 1140910)
Нужно
mc.gotoAndStop(arrayOfFrames[currFrame]);
currFrame++;
поместить в обработчик события EnterFrame , чтобы переход по кадрам происходил каждый кадр.
А так у вас получается , что вы нажали на кнопку и вызвали mc.gotoAndStop() (перейти и остановиться на определенном кадре).

Теперь переход по кадрам происходит, но без остановки, мигает и возвращается на первый кадр, ввел trace(arrayOfFrames); выводит мною поставленные активные кадры 1,2,3,4,5,6,7,48, и без прерывно публикует в output

belv 12.07.2013 18:29

добавьте улсовие
Код AS3:

if(mc.currentFrame == arrayOfFrames[arrayOfFrames.length-1]
{
removeEventListener(Event.ENTER_FRAME , имяфункции);
currFrame = 0;
return;
}
mc.gotoAndStop(arrayOfFrames[currFrame]);
currFrame++;


kirill1989 12.07.2013 23:57

Цитата:

Сообщение от belv (Сообщение 1140914)
добавьте улсовие
Код AS3:

if(mc.currentFrame == arrayOfFrames[arrayOfFrames.length-1]
{
removeEventListener(Event.ENTER_FRAME , имяфункции);
currFrame = 0;
return;
}
mc.gotoAndStop(arrayOfFrames[currFrame]);
currFrame++;


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

belv 13.07.2013 00:51

Если вы хотите чтобы анимация была цикличной тогда так
Код AS3:

if(mc.currentFrame == arrayOfFrames[arrayOfFrames.length-1])
{
mc.gotoAndStop(arrayOfFrames[0]);
currFrame = 0;
return;
}
mc.gotoAndStop(arrayOfFrames[currFrame]);
currFrame++;



Часовой пояс GMT +4, время: 21:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.