Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MovieClip в BitmapData по фреймам (http://www.flasher.ru/forum/showthread.php?t=114542)

SunShadow 01.08.2008 14:06

MovieClip в BitmapData по фреймам
 
Здравствуйте уважаемые
Вопрос следующий. Создал мувик, в нем на каждом фрейме своя картинка. Мне нужно эту картинку упаковать в Bitmap. Вот собственно код:
Код:

var bitmap:BitmapData = new BitmapData(450,525, false, 0x33CCFF);
                        var image:Bitmap;
                        var mc:MyPhoto = new MyPhoto();
                        mc.gotoAndStop(2); // без этого работает, первый кадр видно
                        bitmap.draw(mc);
                        image = new Bitmap(bitmap);
                        addChild(image);

Покопался по документации, воспользовался поиском на форуме. Нашел очень много как вставлять картинки, но со сменой фрейма ни одной темы не видел. все происходит на втором фрейме после полной загрузки ролика через preloader.
Скажите реально снять отпечаток с нужного фрейма? Если да то как это сделать?

litebox 01.08.2008 14:33

Я аналогичную вещь делал - у меня все работает ок, единсвтенное отличие - у меня мувик, в котором я меняю кадр и вывожу на битмап лежит на timeline'е, а не аттачится из библиотеки. И еще, зачем задавать цвет прозрачности, если Вы указываете "без прозрачности" (третий параметр false)

silin 01.08.2008 14:38

с мувиком из библиотеки тоже все работает

>>все происходит на втором фрейме после полной загрузки ролика через preloader

а что там происходит, может надо просто подождать пока произойдет это "все" ?

SunShadow 01.08.2008 14:51

Цитата:

Сообщение от silin (Сообщение 755746)
а что там происходит, может надо просто подождать пока произойдет это "все" ?

Ждем когда bytesLoaded==bytesTotal, а дальше уже идем дальше. Прелоадер в первом кадре как обычно. Может кто нибудь рабочий примерчик кинуть, чтобы поковыряться.

silin 01.08.2008 15:01

так и рисовать эти кадры надо когда все загрузится, а не сразу..

SunShadow 01.08.2008 15:11

Цитата:

Сообщение от silin (Сообщение 755752)
так и рисовать эти кадры надо когда все загрузится, а не сразу..

Вот прелоадер в первом кадре
Код:

package main {
        import flash.display.MovieClip;
        import flash.display.DisplayObjectContainer;
        import flash.text.TextField;
        import flash.events.*;

        dynamic public class preloader extends MovieClip {
                public function preloader() {
                        addEventListener(Event.ENTER_FRAME, Update);
                }

                public function Update(e : Event):void {
                        var bytesLoaded:Number = stage.loaderInfo.bytesLoaded;
                        var bytesTotal:Number = stage.loaderInfo.bytesTotal;
                        var s:String = "";
                        var percent:Number = 0;
                        var mc:MovieClip = parent as MovieClip;
                        if (bytesTotal>0){
                                percent = Math.floor(bytesLoaded/bytesTotal*100);
                                s = percent+"% ("+
                                Math.round(bytesLoaded/1024)+"kb / "+
                                Math.round(bytesTotal/1024)+"kb)";
                        }
                        txt.text="Loading... "+s;
                        progressbar.gotoAndStop(percent+1);
                        // Если полностью загрузились, то переходим на второй кадр
                        if (bytesLoaded==bytesTotal || bytesTotal==0){
                                removeEventListener(Event.ENTER_FRAME, Update);
                                mc.gotoAndStop("StartPage");
                                mc.startGame(); // это как раз старт работы с роликом.
                        }
                }
               
        }
}


SunShadow 01.08.2008 15:27

Что-то я ничего не понимаю. Эксперементировал с trace проверяю какое значение дает переменная... Все заработало. Убираю строчку с trace работает. Сейчас фактически код один в один как отправлял, ничего не менял и не дополнял и все работает. Мне кажется я схожу с ума

silin 01.08.2008 15:31

т.е. момент загрузки ты можешь отследить, вот после этого и срисовывай фреймы

точнее сказать не могу, потому как непонятно причем здесь прелоадер и кто/откуда кого грузит..

litebox 01.08.2008 15:43

Может лучше создать пустышку, которая будет загружать в себя всю флэшку с графикой:
Код:

loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, eventProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, eventComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, eventIOError);

Так Вы точно будете знать, что и когда загрузилось, и загрузилось ли вообще

tyapichu 01.08.2008 17:11

Цитата:

Сообщение от litebox (Сообщение 755772)
Может лучше создать пустышку, которая будет загружать в себя всю флэшку с графикой:
Код:

loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, eventProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, eventComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, eventIOError);

Так Вы точно будете знать, что и когда загрузилось, и загрузилось ли вообще

извините, а почему у вас через contentLoaderInfo слушатели добавляются? это какой-то хитрый метод загрузки? разобраться не могу :(

der hund 01.08.2008 17:39

Цитата:

Сообщение от tyapichu (Сообщение 755793)
извините, а почему у вас через contentLoaderInfo слушатели добавляются? это какой-то хитрый метод загрузки? разобраться не могу :(

Без contentLoaderInfo слушатели событий просто не прикрцчиваются...

Попробуй без contentLoaderInfo...

tyapichu 01.08.2008 17:51

Цитата:

Сообщение от der hund (Сообщение 755801)
Без contentLoaderInfo слушатели событий просто не прикрцчиваются...

Попробуй без contentLoaderInfo...

ну вот есть у меня воттакой код... Event.COMPLETE прикручивается, и даже отзывается, и функция отвечающая правильно срабатывает.

Код:

function loadRefXML(FileName:String):void
{
        var refXMLFileURL:String = baseRefFolder+FileName+'.xml';
        var fileXMLLoader:URLLoader = new URLLoader();
        var fileXMLRequest:URLRequest = new URLRequest(refXMLFileURL);
        fileXMLLoader.load(fileXMLRequest);
        fileXMLLoader.addEventListener(Event.COMPLETE, onRefXMLLoadComplite);
}

function onRefXMLLoadComplite(eve:Event):void
{
        var fileLoader:URLLoader = eve.target as URLLoader;
        var i:Number;
        if(fileLoader != null)
        {
                refXMLArr.push(new XML(fileLoader.data));
                trace(refXMLArr[refXMLArr.length-1].toXMLString());
        }
        else
        {
                trace('bug');
        }
}

правда у меня есть другая проблема заключающаяся в том, что если загружать не XML, а SWFм (с соответствующими изменениями) работать перестает :/ fileLoader.data возвращает "CWS ", с которым ничего сделать нельзя. что-то я не так делаю, но мозг пока не доходит.

mre 01.08.2008 17:56

Цитата:

> Без contentLoaderInfo слушатели событий просто не прикрцчиваются...
Прикручиваются. Но события инициируются в LoaderInfo.

Felicast 01.08.2008 17:56

Цитата:

правда у меня есть другая проблема заключающаяся в том, что если загружать не XML, а SWFм (с соответствующими изменениями) работать перестает :/ fileLoader.data возвращает "CWS ", с которым ничего сделать нельзя. что-то я не так делаю, но мозг пока не доходит.
и правильно делает. нужно использовать просто Loader.
мувиклип достается из
Код:

target.content

mre 01.08.2008 17:57

tyapichu, не путайте URLLoader и Loader.

tyapichu 01.08.2008 18:14

Цитата:

Сообщение от mre (Сообщение 755809)
tyapichu, не путайте URLLoader и Loader.

ой ты блин... спасибо!


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

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