![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: May 2012
Сообщений: 8
|
Всем доброго дня.
Есть класс для загрузки изображений и компоновки их в соотвествующие спрайты для дальнейшего использования. При запуске из flashDevelop да и просто при помощи плеера, все ок, картинки подгружаются. При открытии в браузере пишет ошибку - TypeError: Error #2007: Parameter child must be non-null. at flash.display: isplayObjectContainer/addChild()at Function/<anonymous>()[C:\wamp\www\chess\DataLoader.as:74] Выкладываю код класса, не обессудьте что кода не мало, просто не знаю как еще лучше объяснить суть проблемы. package { import flash.display.Bitmap; import flash.display.Loader; import flash.events.Event; import flash.filters.BlurFilter; import flash.media.Sound; import flash.net.URLRequest; /** * ... * @author Svetlov */ public class DataLoader { public function DataLoader(gameBody:Function) { // Loading board var addBoard:Function = function(e:Event):void { GVC.board = ld.content as Bitmap; } var ld:Loader; ld = new Loader(); ld.contentLoaderInfo.addEventListener(Event.COMPLETE, addBoard); ld.load(new URLRequest('media/images/chessgame/chessboard.png')); // Loading figures var loadWhites:Function = function():void { gameBody.call(); } var loadBlacks:Function = function():void { loadFigures('white', loadWhites); } loadFigures('black', loadBlacks); // Loading sounds loadSounds(); } /** * Loading figures images from disk * @param color - color of the figures * @param cb - callback function */ public function loadFigures(color:String, cb:Function):void { var i:int; var f_names:Array; if(color == 'white'){ f_names = new Array('rook', 'knight', 'bishop', 'king', 'queen', 'bishop', 'knight', 'rook'); }else { f_names = new Array('rook', 'knight', 'bishop', 'queen', 'king', 'bishop', 'knight', 'rook'); } var bitmapImages:Array = new Array(); for (i = 0; i < 8; i++) { f_names.push('pawn'); } var figures:Array = new Array(); for (i = 0; i < f_names.length; i++) { figures[i] = new Figure(); figures[i].name = f_names[i]; figures[i].this_color = color; } var ldrs:Array = new Array(); for (i = 0; i < f_names.length; i++) { ldrs.push(new Loader); } var calb:Function = function(e:Event):void { bitmapImages.push(ldrs[bitmapImages.length].content as Bitmap); figures[bitmapImages.length-1].addChild( bitmapImages[bitmapImages.length - 1]); if (bitmapImages.length == f_names.length) { if (color == 'white') { GVC.bitmapWhites = bitmapImages; GVC.whites = figures; } if (color == 'black') { GVC.bitmapBlacks = bitmapImages; GVC.blacks = figures; } cb.call(); } } for (i = 0; i < f_names.length; i++) { ldrs[i].contentLoaderInfo.addEventListener(Event.COMPLETE, calb); trace('media/images/chessgame/' + color + '/' + f_names[i] + '.png'); ldrs[i].load(new URLRequest('media/images/chessgame/'+color+'/'+f_names[i]+'.png')); } } public function loadSounds():void { GVC.right_sound = new Sound(new URLRequest('media/sounds/chessgame/knock.mp3')); GVC.wrong_sound = new Sound(new URLRequest('media/sounds/chessgame/wrong.mp3')); } } } UPD: Забыл сказать что открываю с тестового сервера по url. Если открыть в браузере по абсолютному пути все ок. Последний раз редактировалось Svetlov; 29.05.2012 в 21:44. |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 497
|
Цитата:
Вторая возможная причина - неверный url. Вы же ошибки не обрабатываете, поэтому произойдет "пропуск" лоадеров. |
|
|||||
|
Регистрация: May 2012
Сообщений: 8
|
Спасибо. Ваше первое предположение по поводу причины ошибки оказалось верным. Действительно лоаер под индексом идущим по порядку может быть вовсе не тем. Странно что это сказалось только при открытии через браузер.
Решил следующим образом - 1) Расширил класс Loader Ну и в коде сделал соответсвующие правки, вместо индксов по порядку взял индекс объекта лоадера передаваемого в объекте события. |
|
|||||
|
А что странного. Браузер картинки грузит, а картинки разного размера.
Локально в большинстве случаев всё происходит мгновенно.
__________________
adobe AS3 manual |
|
|||||
|
Регистрация: May 2012
Сообщений: 8
|
strangedk
Ну вообще картинки одинаковые, это же фигуры) Все 75\75 пикселей. Но суть думаю я понял, при открытии через урл, браузер подгружает картинки иначе чем при открытии через абсолютный путь, в этом случае скорее всего он вообще ничего не грузит, а оставляет это флешу. Хотя мне казалось что флеш менее браузернозависимая среда... |
|
|||||
|
в любом случае нужно понимать, что любой процесс загрузки может завершиться с разным результатом, и конечно же асинхронно.
Поэтому расчитывать нужно только на соответствующие обработчики событий.
__________________
adobe AS3 manual |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Рассчитывать можно также на последовательную загрузку, если порядок появления тоже важен.
__________________
Reality.getBounds(this); |
|
|||||
|
Цитата:
Цитата:
__________________
adobe AS3 manual |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|