Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   длинная анимация copyPixels (http://www.flasher.ru/forum/showthread.php?t=145337)

3p.station 05.10.2010 12:23

длинная анимация copyPixels
 
Всем приветы!
есть у меня два мувиклипа с видяшкой (flv немаленькие) внутрях. Когда проигрывается один, другой пригрывается в обратную сторону. Пробовал через ENTER_FRAME проигрывать назад, так:
Код AS3:

        if( myMc.currentFrame > 1 )
        {
                myMc.gotoAndStop( myMc.currentFrame - 1 );
        } else
        {               
                myMc.gotoAndStop( 1 );
                removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        }

при таком раскладе жутко тормозит ентерфрейм :confused: и процесс происходит ооочень медленно
попробывал TweenMax - стало приятней хоть и с рывками но быстро
и таки решил делать черех copyPixels- создать битмапдату в которую, пробегая предварительно по всем кадрам видяшки, "врисовать" все кадры по порядку, а потом их брать из нее сдвигаясь, зная ширину одного "кадра" . остановило то что битмадата имеет ограничения в размерах, следовательно все 280 кадров я не вмещу туда

посоветуйте плиз какие может есть еще решенеия

спасибо:drinks:

GBee 05.10.2010 12:50

1) "Врисовывать" не только в длину, но и в высоту.
2) Использовать несколько Битмап :о)

VVall 05.10.2010 14:06

Вы для начала посчитайте, сколько памяти это займёт - ширина*высота*4*количества кадров.

3p.station 05.10.2010 14:29

йяй
не знаю как посчитать но чую, что
много занимать будет это (как у меня) 280 кадров 300х600 и таких у меня 3 мувика

сделать битмапдату на первые 10 кадров, потом ее удалить сделать следующую еще на 10.... - так пойдет ?

VVall 05.10.2010 15:09

Я же написал выше, как посчитать. 300*600*4*280=примерно 192 мегабайта. Это много, у людей были проблемы уже со 140 мегабайтами, и я где-то встречал утверждение, что лучше ограничиться 70 мегабайтами (не знаю, насколько актуально).

Перевыделение больших объёмов памяти тоже может привести к проблемам. Но не глядя сказать сложно, надо пробовать.

3p.station 05.10.2010 15:27

:rolleyes: да уж, как это я не "видел" формулу , сорри

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

спасибо!

alatar 05.10.2010 16:51

Сделайте 6 видео. 3 с прямым порядком кадров, 3 с обратным (изначально, без попыток провернуть это в реалтайме). Это потребует меньше памяти и ресурсов при воспроизведении.

3p.station 05.10.2010 17:50

идея хорошая и полезная, спасибо!
у меня тогда правда будет флешка 10мб весить ( :

Добавлено через 2 часа 6 минут
и все же, не понимаю, почему так начинает жутко тормозить ЕнтерФрейм, разве когда я делаю просто play() , по другому идет процесс? Если да, может можно как-то сделать и с покадровой прокруткой назад...

Добавлено через 2 часа 12 минут
fps падает до 4 - 9 с 40 ...

alatar 05.10.2010 20:04

Цитата:

по другому идет процесс?
По-другому. Расчет ключевых кадров еще никто не отменял.

3p.station 05.10.2010 21:20

вообщем решился вопрос с помощью таки copyPixels :) таймер
и
Код AS3:

private var framesOfAnimation:Vector.<BitmapData> = new Vector.<BitmapData>;

и копированием через 5 кадр

тока теперь очень странная тема получилась -
когда весь массив заполнен монстер дебаггер показывает 60 метров
потом я беру из массива -
Код AS3:

var bitmpdata:BitmapData = framesOfAnimation.shift();

таким образом
и когда дохожу до конца - монстер показывает 59 метров :eek:
это как так может быть??

(если кому интересно подробно как решил вопрос могу распиать :drinks:)


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

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