Тип bitMapData графического объекта совпадает с типом bitmapData?

Название может немного ввести в заблуждение. Посмотрите на мой код, и я объясню

public static function loadTile(tileDir:String = "empty"):void
        {
            if(tileDir != "empty")
            {
                tPoint = new Point(0,0);
                tRect = new Rectangle(0,0,30,30);

                //load in tile sheet image
                loader = new Loader();
                loader.contentLoaderInfo.addEventListener(Event.INIT,tilesLoadInit);
                loader.load(new URLRequest(tileDir));
            }
        }

         private static function tilesLoadInit (e:Event):void {
             tileImage = Bitmap(loader.content).bitmapData;
             tileReady.dispatchEvent(new Event("TileReady"));
         }
var tImage:BitmapData = new BitmapData(30,30);
tileNum = tileNumber;
tPoint.x = 0;
tPoint.y = 0;

tRect.x = 0;
tRect.y = 0;

tImage.copyPixels(tileImage,tRect,tPoint);

this.graphics.beginBitmapFill(tImage);
this.graphics.drawRect(0, 0,tWidth ,tHeight );

Я создаю пустой bitMapData с именем tImage. Затем я беру предопределенную переменную с именем tileImage, которая также является bitMapData и содержит изображение изображения. tRect предопределен, а его ширина и высота 30x30. Копирую кусок изображения и помещаю в tImage. проблема в том, что AS3 выдает ошибку, говоря, что tImage - неправильный тип

ArgumentError: Error #2015: Invalid BitmapData.

Но очевидно, что это не так. мой вопрос в том, что есть что-то другое в типах данных bitMapData и bitMapData, которые принимает графический объект?

Пытаюсь сделать тайлинг спрайтами. Я хочу, чтобы мои плитки были интерактивными, поэтому я использую объект-спрайт вместо обычных растровых изображений для представления своих плиток. Вам может быть интересно, почему я не использую просто graphics.beginBitmapFill (tImage); и graphics.drawRect (0, 0, tWidth, tHeight); чтобы выбрать плитки, которые я хочу использовать. Причина в том, что оказывается, что первый и второй параметры drawRect () фактически изменяют местоположение фактического спрайта.

Поэтому, если я устанавливаю свойства x и y спрайта на x = 20 и y = 20., я устанавливаю свой drawRect (20,20). он фактически добавляет дополнительные 20 пикселей к моим координатам x и y моего спрайта. И я знаю причину, мне просто нужно знать способ получше. Приносим извинения за так много написанного и благодарим за уделенное время!


person numerical25    schedule 29.12.2009    source источник


Ответы (2)


Это не говорит о том, что тип неправильный, это говорит о том, что объект недействителен. Я ожидаю, что вы получите TypeError, если тип будет неправильным.

Вы также не указали, где именно возникает ошибка, и предполагаете, что проблема связана с tImage в 8-й строке. Более вероятно, что проблема связана с tileImage (о котором вы не сообщили подробностей) в строке 7.

person Kylotan    schedule 30.12.2009
comment
Я добавил больше деталей на tileImage. Как я уже сказал, это bitMapData, и он работает. Если я передам tileImage в методе beginBitmapFill вместо tImage. он работает, и я не получаю ошибок. но если вместо этого я попытаюсь сначала обрезать изображение, а затем передать его, тогда возникает ошибка, указанная выше. Они оба являются типами bitMapdatas, за исключением случаев, когда я решаю сначала обрезать изображение с помощью метода copyPixel, это не работает. - person numerical25; 30.12.2009
comment
Извините, если я не могу быть таким подробным. Но вкратце, любой bitMapData, который получает содержимое из метода copypixel, не работает в методе beginBitmapFill. Это все еще тип bitMapData, но он не работает. Мне просто любопытно, почему - person numerical25; 30.12.2009

Вероятно, это из-за встроенного ограничения Flash на размер объектов BitmapData. Если общее количество пикселей превышает 16 777 215, выдается ошибка № 2015.

Вы можете прочитать об этом в документации: BitmapData, прямо над" Просмотреть примеры ".

Вот трюк, который работал, если вы хотите попробовать: Временное решение BitmapData

person Max Dohme    schedule 06.03.2011