PDA

Просмотр полной версии : Error #2015: Invalid BitmapData как побороть?


VovkaMorkovka
15.11.2007, 16:13
Здраствуйте господа!
Проблема такая: я заполняю мувиклитами карту разбитую на клетки. Каждый мувиклип - одна клетка. Делаю я это так: в пустой мувиклип аттачу битмапу. Какую именно зависит от входных условий, но для теста аттачу одну и ту - же.
Карта большая - 100x100 клеток, соответственно имеем 10000 мувиклипов
Я поборол ошибку максимального исполнения скрипта с помощью таймера. Но, к определенному моменту вылетает такая ошибка

Error #2015: Invalid BitmapData

Я тут пошарился в инете и нашел в форуме такой вопрос и ответ


Вопрос

I tried to get a bitmap copy of the Application..No problem.
But when I try to get the bitmapdata from a canvas within the
Application it's giving me an error.

// I'm using this
var data : BitmapData = new BitmapData(target.width, target.height,
true, 0);

data.draw(target);

//This is the error?!! with target =
Application.application.content_canvas
Error #2015: Invalid BitmapData.


Ответ


This might be because your Canvas component isn't initialised yet. i.e.
check what width and height properties are assigned to the Canvas.
What's the container of it?

Best,
Alex


А вот код в котором возникает ошибка

protected override function attachBitMap(nameOfBitM:String):void{
var debugInfo:String="nameOfBitM:"+nameOfBitM+"\n"
try{

var bitmapData:BitmapData;//=new t1_1(SetParameters.CELL_WIDTH,SetParameters.CELL_HEIGHT);
debugInfo+="\nbitmap data start";
switch(nameOfBitM){
case "t1_1":
bitmapData=new t1_1(SetParameters.CELL_WIDTH,SetParameters.CELL_HEIGHT);
break;
......... case "t3_19":
bitmapData=new t3_19(SetParameters.CELL_WIDTH,SetParameters.CELL_HEIGHT);
break;
default:
bitmapData=new t1_11(SetParameters.CELL_WIDTH,SetParameters.CELL_HEIGHT);
}
debugInfo+="\n bitmapdata is created";

var bitm:Bitmap=new Bitmap(bitmapData);
debugInfo+="\n bitmap is created";
this.addChild(bitm);
debugInfo+="\n this.addChild(bitm);";
}catch(e:Error){
trace(e.message+"\nnameOfBitM:"+nameOfBitM+" error"+debugInfo);
}
}

Вот, но как побороть это я не знаю


Заранне благодарен,
Владимир

2morrowMan
15.11.2007, 17:42
Обрабатывай событие Event.ADDED_TO_STAGE и после него уже делай то что надо.

VovkaMorkovka
15.11.2007, 17:50
А не может так быть, что тупо не хватает памяти для этих объектов?
У меня появилась такая версия

VovkaMorkovka
15.11.2007, 18:13
Короче попробовал я предложенный вариант - та же проблема, ограничил размер карты до 80x80 - заработало. Похоже придется добавлять на экран только видимые объекты, а невидимые удалять

__i
15.11.2007, 18:23
есть еще такая вероятнось:
1. неверный размер битмап даты (один из размеров равен 0 или больше чем 2880)
2. Мувиклипу установлен флаг cacheAsBitmap = true, а в процессе атача битмапов размер его становиться больше чем 2880

Rzer
20.08.2008, 15:28
В зависимости от компьютера после энного вызова new BitmapData() - возникает ошибка, также избегай метода clone для битмапДаты. Для FlashPlayer это число намного больше, чем для плеера среды.

etc
20.08.2008, 15:38
Rzer, вопрос был задан 10 месяцев назад.

ulik
20.08.2008, 15:39
VovkaMorkovka >>
Карта большая - 100x100 клеток, соответственно имеем 10000 мувиклипов
Совет: показывайте, создавайте клипы, но только те, которые "входят в рабочую область" т.е. видны. Зачем вам остальные? Делайте это в рантайме. Если у вас экране видно всего лишь поле 2x2, то и создавайте 4 клипа, а не 10000. И хак с таймеров не нужен будет.

зы: Денис, сорь. Лоханулся.. На дату не глянул :(
Закрой тему, просто.

Rzer
20.08.2008, 15:42
Поисковиком нашел - на дату не посмотрел....