Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Преобразовать MovieClip в массив Sprite (http://www.flasher.ru/forum/showthread.php?t=140094)

ChuwY 20.05.2010 06:15

Преобразовать MovieClip в массив Sprite
 
Собственно спросить больше нечего.
Есть мувклип, нужно каждый кадр вставить в отдельный спрайт.
Если кто-то смотрит сейчас и знает как -- ответьте пожалуйста.
Очень срочно =х

silin 20.05.2010 10:25

как вариант: сложить в массив экземпляры этого мувика, остановленные на разных кадрах

ChuwY 20.05.2010 19:26

Думал об этом, но, решив, что кадров может быть несколько сотен, не стал пробовать даже.
Хотя... вот сейчас никуда не спешу и попробую.

incvizitor 20.05.2010 19:35

Если такое подойдёт, можно прорисовать каждый кадр в новом Битмап.

Добавлено через 8 минут
А еще можно было бы попробовать:

Код AS3:

import flash.display.MovieClip;
import flash.display.Sprite;
 
var mc:MovieClip = new MyClip();
var sprites:Array = [];
 
for(var i:uint = 0; i < mc.totalFrames; i++) {
        var app_mc:MovieClip = new MyClip();
        var sp:Sprite = new Sprite();
        app_mc.gotoAndStop(i);
        for (var j:uint = 0; j < app_mc.numChildren; j++) {
                sp.addChild(app_mc.getChildAt(j)); // вернёт всех потомков с их состоянием именно в данный момент
        }
        sprites.push(sp);
        app_mc = null;
}


dimarik 20.05.2010 22:10

Пример не будет работать как задумано.

ChuwY 13.07.2010 00:49

Как ни странно пример то работает.
Но на маленьком количестве объектов.
А в реальной программе жутко глючит =(
(разбор страницы переведенной из пдф по флэш)
Есть еще идеи?

BlooDHounD 13.07.2010 01:04

@ChuwY
Вам сказали, что
Цитата:

Сообщение от dimarik
Пример не будет работать как задумано.

что собственно и произошло. можете сделать скриншот каждого кадра.

Сайлас 13.07.2010 01:09

Ну есть медленный, но вроде бы работающий метод
Код не оптимизировал
Код AS3:

var bs:Vector.<BitmapData> = new Vector.<BitmapData>;
                        for (var i:int=1;i<mc.totalFrames;i++) {
                                mc.gotoAndStop(i);
                                var b:BitmapData = new BitmapData(mc.width,mc.height);
                                b.draw(mc);
                                bs.push(b);
                        }

Хотя не знаю будет работать или нет, щас пойду попробую :)
Update: ага, работает

ChuwY 13.07.2010 01:27

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

Но спасибо за ответ!

gloomyBrain 13.07.2010 01:46

Если мувик целиком векторный, можно использовать Graphics.copyFrom()

ChuwY 13.07.2010 01:54

Ммм. Нет. Не целиком. Увы. Картинки тоже есть.
Мувик -- то, что получается после работы pdf2swf из swftools.
То есть подгруженная флешка. В ней текст векторный, а картинки... картинки -- картинки =)
Не знаю, как он векторную графику обрабатывает, но и не суть важно.
Текст, вот что наиболее значимо =(

gloomyBrain 13.07.2010 02:46

В конечном итоге можно отрисовывать в битмап по мере отображения. Вряд ли Вам понадобится более 2-х страниц сразу. Так что с памятью не будет перегруза

ChuwY 13.07.2010 02:53

Нужно, чтобы в воздухе было поднято при поворачивании сразу много страниц.
В битмапе сильно снижается читаемость текста и не работают ссылки.
Подобные работы я видел, значит есть способ =(

Сайлас 13.07.2010 13:47

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

ChuwY 13.07.2010 13:51

Ну не подходит битмаптада... Тем более явно есть способ сделать то, что нужно.
Только вот я его не знаю =)

ins_nsk 13.07.2010 14:59

gloomyBrain, нифига


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

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