Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Не работает в ВК функция draw класса BitmapData - так и должно быть? (http://www.flasher.ru/forum/showthread.php?t=137769)

mikhailk 22.03.2010 13:15

Не работает в ВК функция draw класса BitmapData - так и должно быть?
 
Приложение подключено через FLASH-контейнер.

Вот этот код работает на декстопе, но не работает после загрузки в ВК (containerBasic - контейнер с объектами, containerOverGame - слой поверх игры):

Код AS3:

                        var bmpdata:BitmapData = new BitmapData(800, 600);
                        bmpdata.draw(containerBasic);
                        var bitmap:Bitmap = new Bitmap(bmpdata);
 
                        bitmap.x = 200;
                        bitmap.y = 200;
                        bitmap.scaleX = 0.5;
                        bitmap.scaleY = 0.5;
 
                        containerOverGame.addChild(bitmap);


udaaff 22.03.2010 13:46

А ошибки какие-то вылетают? Возможно, политика безопасности отрисовать не дает.

mikhailk 22.03.2010 13:57

Ошибок как таковых нет.
Просто изображение экрана не отрисовывается.

Zebestov 22.03.2010 14:46

containerBasic содержит в себе загруженные с помощью Loader изображения с сервера контакта или какого-либо другого?

mikhailk 22.03.2010 15:02

он содержит в себе объекты из библиотечных swf, подруженных с ВК


Видимо, у меня вот это (из адобовских доков):

*******
Примечание. Объект source и (в случае с объектами Sprite и MovieClip) все его дочерние объекты должны находиться в том же домене, что и вызывающий объект, или в SWF-файле, доступном вызывающему объекту посредством вызова метода Security.allowDomain(). Если эти условия не соблюдаются, метод draw() ничего не рисует.
********

Что и где надо прописать?

Zebestov 22.03.2010 16:11

у меня ничего не заработало пока я Loader-у не скормил context:

Код AS3:

var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, SecurityDomain.currentDomain);

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

mikhailk 22.03.2010 16:23

у меня подгрузка так и реализована:

Код AS3:

public class libraryLoader extends Sprite {
 
                public var library;
                private var basicPreloader;
                private var containerOverGame;
 
                public function libraryLoader(libraryUrl,_containerOverGame) {
 
                        containerOverGame = _containerOverGame;
 
                        // Показываем прелоадер
                        basicPreloader = new BasicPreloader();
                        containerOverGame.addChild(basicPreloader);
 
 
                        Security.allowDomain("*");
                        var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
                        var domain = new LocalConnection().domain;
                        if (domain!="localhost") context.securityDomain = SecurityDomain.currentDomain;
                        context.applicationDomain = ApplicationDomain.currentDomain;
 
 
                        var lib:MovieClip=new MovieClip();
                        var l:Loader=new Loader();
                        l.contentLoaderInfo.addEventListener(Event.COMPLETE, completeLoadLibrary);
                        l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
 
                        l.load(new URLRequest(libraryUrl), context);                       
                        lib.addChild(l);
                }       
 
 
                private function completeLoadLibrary(e:Event)  {
 
                        var ldr:Loader = Loader(e.target.loader);
                        var library = ldr.contentLoaderInfo.applicationDomain.getDefinition;
 
                        containerOverGame.removeChild(basicPreloader);
 
                        var eventData = library;
 
                        var parkingEvent:ParkingEvent = new ParkingEvent("libraryLoaded",eventData,true)
                        dispatchEvent(parkingEvent);                                       
 
                }                       
 
                private function progressHandler(event:ProgressEvent):void {
 
                        var progressNum:Number = new Number(event.bytesLoaded /  event.bytesTotal * 100);
                        basicPreloader.procentLoaded.text = progressNum.toFixed(0) + "%";
        }
 
        }

Добавлено через 5 минут
Повторюсь, сами-то объекты присутствуют (видны) на сцене.
Их не видит только draw();
Какая-то мистика.

Добавлено через 6 часов 29 минут
Решение вроде нашлось

Оказывается flash объекты грузит и показывает, но чтобы редактировать их свойства (draw нужен этот уровень доступа) требуется загрузка файла политик. Чего у меня не было.

Завтра попробую.

Добавлено через 23 часа 41 минуту
чего-то ничего не выходит...
скоро голова треснет

Добавлено через 69 часов 18 минут
между делом разобрался, может кому поможет - нарушение изолированной среды вызывали фотографии пользователей, подгруженные в текстовые поля через htmlText.
Код:

userPhoto.htmlText = "<img src='" + userInfo.photo + "'>";

djyamato 19.05.2010 14:47

а если это не картинка а NetStream, то как написать нужно, чтобы можно было фотографировать методом draw время от времени картинку из видео ?

Вот я пишу:
Код AS3:

 
Security.allowDomain("*");
Security.loadPolicyFile("http://mySiye.ru/video/crossdomain.xml");
 
.....
BD.draw(sourceVideoSprite,null,null,null,null,Smooth);

в локали есть сфотографированная кртинка (естественно) а в сети если тестировать то нет
файлы crossdomain.xml лежат и возле флэшки воспроизводящей видеопоток и возле файла потока

Текст файла:
Код:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>



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

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