Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   маска из Bitmap (http://www.flasher.ru/forum/showthread.php?t=157314)

Contemplator 03.06.2011 16:39

маска из Bitmap
 
Вложений: 1
Приветствую!
Столкнулся с необычной проблемой: растрированное изображение (имеющее области прозрачности), применяемое в качестве маски ведёт себя тупо как прямоугольник, залитый сплошным цветом (прозрачности не учитываются)...
Код AS3:

/*Некий класс, описывающий уровень...
skip
где-то после добавления на экран в одном из методов отрисовываю карту слоя (пример утрирован - не суть)*/

var floorTilesMaskSprite:Sprite = new Sprite(); //Временный спрайт куда при отрисовке карты пихаю составные части карты
for (var i:int = 0; i < 20; i++){
    for (var j:int = 0; j < 20; j++){
        var tile:Tile = new Tile(); /*Не вдаваясь в дебри будем считать что Tile отвечает и за графику и за
свойства (на деле мухи отдельно, но для примера не существенно)*/

        var position:Point = new Point(j*X_SIZE, i*Y_SIZE);
        tile.getPosition(position);
        _leyer01.addTileToFloor(tile); /*_layer01 - экземпляр класса работающего с логикой (можно
перемещаться дальше или нет, провалимся на слой ниже или нет etc)... ну да, графику я тоже к нему
прикрутил :rolleyes: */

        if (Math.random() > .3) {
            var tilesMask:TilesMask = new TilesMask();
            tilesMask.getPosition(position);
            floorTilesMaskSprite.addChild(tilesMask); //На деле добавляется графика с контуром плитки
        }
    }
}
_leyer01.addShadowMask(restrize (floorTilesMaskSprite, floorTilesMaskSprite.width + X_SIZE, floorTilesMaskSprite.height + Y_SIZE));
 
//в этом же классе живёт метод для растризации (ну да, да... сам знаю...)
private function rastrize(vector:DisplayObject, width:Number, height:Number):Bitmap {
        var bmpData:BitmapData = new BitmapData(width, height, true, 0x000033);
        bmpData.draw(vector);
        var bmp:Bitmap = new Bitmap(bmpData);
        return bmp;
}

Код AS3:

/*Класс, экземпляром которого является _layer01 из вышеуказанного класса
skip
тут определены спрайты под плитки, спрайт под маску; определены публичные методы по добавлению в
каждый из спрайтов объектов... В методе, где добавляется объект в спрайт с маской параллельно вызывается
метод "переприменяющий" маскирование applyMask() - нужно, т.к. со временем маска может измениться
(некий объект упадёт на более нижний слой и тем самым станет частью пола текущего слоя)*/

private function applyMask():void {
        _shadows.cacheAsBitmap = true;
        _shadowsMask.cacheAsBitmap = true;
        _shadows.mask = _shadowsMask;
}

Если не растрировать - маска работает корректно,.. но и растрируется всё корректно (проверял посредством вывода маскирующего спрайта как обычного - адекватно растрированная картинка там где и должна быть)...

P.S. sorry за быдлокод :rolleyes:

UPD: картинка для наглядности =))

goodguy 03.06.2011 20:00

Это косяк флеш плеера. В версии 10.0 было с точностью до наоборот. Такой косяк появился с версии 10.1


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

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