![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 5
|
Здравствуйте, уважаемые Флешеры. Помогите, пожалуйста, осознать, почему в данном коде происходит ошибка компиляции
C:\Documents and Settings\Администратор\Рабочий стол\Newtest2\RebegaMonster test\test\Test2.as, Line 33 1119: Access of possibly undefined property bitmapData through a reference with static type flash.display:DisplayObject. package { import flash.display.MovieClip; import flash.display.Sprite; import flash.display.Loader; import flash.events.*; import flash.net.*; import flash.display.Bitmap; import flash.display.BitmapData; public class Test2 extends MovieClip { var _loader:Loader = new Loader(); var file:String = "Krab0001.png"; var _request:URLRequest = new URLRequest(file); public function Test2() { btn1.addEventListener(MouseEvent.CLICK,pngLoad); } public function pngLoad(event:MouseEvent) { _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener); _loader.addEventListener(Event.COMPLETE,displayPng); _loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); _loader.load(_request); } public function displayPng(e:Event):void { var bitmap:BitmapData=_loader.content.bitmapData; var image:Bitmap = new Bitmap(bitmap); addChild(image as Bitmap); } public function progressListener(e:ProgressEvent):void { trace("Loaded " + e.bytesLoaded + " of " + e.bytesTotal + " bytes."); } public function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } } } В практически аналогичном коде из учебника всё работает: package { import flash.display.Sprite; import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import flash.display.Bitmap; import flash.display.BitmapData; public class BitmapLoader extends Sprite { private var _loader:Loader = new Loader(); public function BitmapLoader() { _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); _loader.load(new URLRequest("Krab0001.png")); } public function onComplete(event:Event):void { var image:Bitmap = Bitmap(_loader.content); var bitmap:BitmapData = image.bitmapData; addChild(image); } } } Последний раз редактировалось Grays; 07.02.2012 в 20:04. Причина: Очепятка |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Код не аналогичный:
Свойство bitmapData есть только у класса Bitmap. С чего вы взяли что _loader.content - это экземпляр класса Bitmap? |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 5
|
О, спасибо, что надоумили! Действительно, это я упустил из виду. Добавил этот код по образу и подобию из другой программы, т.к. решил, что задачи (вроде бы) решались одинаковые. Но что-то упустил.
Но, если вам не трудно, ответьте, пожалуйста, если исправную версию кода использовать в первом варианте вот так: public function pngLoad(event:MouseEvent) { _loader.addEventListener(Event.COMPLETE,displayPng); _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener); _loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); _loader.load(_request); } public function displayPng(e:Event):void { var image:Bitmap = Bitmap(_loader.content); var bitmap:BitmapData = image.bitmapData; image.x = stage.stageWidth / 2; image.y = stage.stageHeight / 2; addChild(image); } И ещё скажите, пожалуйста, если сделать в функции pngLoad цикл загрузки картинок по ссылкам из массива, то может возникнуть такая ситуация, что картинки не будут успевать загрузиться, так как флеш будет уже пытаться загрузить новые? Они же, если большие, то грузятся долго, а флеш, вроде, ходит по циклам с бешеной скоростью, верно? Или можно не переживать об этом? Например, так: for (var i in ArrayBitmaps){ _loader.addEventListener(Event.COMPLETE,displayPng); _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener); _loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); _loader.load(ArrayBitmaps[i]); resultArray.push(_loader); } Последний раз редактировалось Grays; 07.02.2012 в 20:54. |
|
|||||
|
Banned
|
1) Что бы любой экранный объект стал видимым, его нужно добавить в область видимости. Как правило это делается так:
2) Загрузка нескольких изображений (и другой информации) решается двумя способами: а) Грузить одним загрузчиком картинки по очереди б) Создавать для каждого запроса новый загрузчик Я бы использовал а) |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 5
|
Цитата:
(все переменные явным образом объявлены в классе) .... backPathsArray = calf(_named,_actio,"back"); .... public function calf(_named:String,_actio:String,_line:String):Array { var directionArray:Array = []; var loadedFileArray:Array = []; // Это ассоциативный массив, в нём содержатся ссылки на файлы, которые необходимо загрузить. for (var i in SomebodyMonsters[_named][_actio][_line]) { _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); _loader.addEventListener(IOErrorEvent.IO_ERROR, onErrorHandlerIOErrorEvent); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onInfoIOErrorEvent); try { _loader.load(new URLRequest(SomebodyMonsters[_named][_actio][_line][i])); } catch (e:TypeError) { trace("Не могу загрузить файл"); trace(e.message); } то на экране отображается оная картинка, а в конечном массиве образуется множество [object Loader], но они мне не нужны, я хочу поместить все картинки в массив, из которого затем буду их использовать, поэтому пробую применять следующий код - первые 3 строчки ключевые. var image:Bitmap = _loader.content as Bitmap; var bitmap:BitmapData = image.bitmapData; directionArray.push(image); } loadedFileArray = directionArray; return loadedFileArray; } Почему так происходит? В чём мои ошибки? Мне в конечном итоге нужен какой-либо способ нормально взаимодействовать с загружаемыми картинками, как экземплярами Bitmap, но через массив. Пожалуйста, помогите, не выходит разобраться. P.S. Забыл добавить, что все события срабатывают нормально, (компилятор бывало ругался только на строчку var bitmap:BitmapData = image.bitmapData . По событию прогресса видно, что картинки загружены.Последний раз редактировалось Grays; 08.02.2012 в 21:07. |
|
|||||
|
Banned
|
Вот самый простой пример последовательной загрузки:
// один загрузчик на все картинки var loader:Loader = new Loader(); // вешаем событие loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); // список нужных ресурсов var list:Array = ["1.png", "2.png", "3.png"]; // номер загружаемой картинки var i:uint; // массив с полученными Bitmap-ами var images:Array = []; /** обработчик события успешной загрузки */ function onCompleteHandler (event:Event):void { images.push((event.target as LoaderInfo).loader.content as Bitmap); if (i < list.length) nextLoad(); else trace("Все картинки загружены: ",images); } /** грузим следующую картинку */ function nextLoad ():void { loader.load(new URLRequest(list[i])); i++; } // начинаем загрузку nextLoad(); |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 5
|
Ммм, что-то снова не так делаю.
Почему этот код может выдавать ошибку SecurityError: Error #2000: Отсутствует активный контекст безопасности. ??? |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|