scale9Grid和Bitmaps - 它们是否一起工作?

jay*_*rjo 3 flash bitmap actionscript-3 scale9grid

我还没有习惯Flash IDE环境,所以我在FlashDevelop中编写纯代码.我得到了各种图形资产的精灵,其中一个用于与那个非常有用的scale9Grid功能一起使用......它没有用.因为我在生命中第一次这样做,我以为我搞砸了一些东西,但后来我尝试了drawRoundRect和beginFill(而不是beginBitmapFill)并且它按预期工作.我的逻辑思路是它不适用于位图(尽管在Adobe Livedocs示例中他们使用orangoutang的图片来演示scale9Grid功能).

之后,我阅读了各种各样的意见,从"它工作正常"开始,以"它不起作用,拧你Adobe"结束.所以我现在很好奇,它有效还是不行?

我已经找到了如何在Embed语句中指定scale9Grid参数,但我的嵌入图像是精灵.我想无论如何它都无法使用,对吧?

小智 9

在深入了解[Embed]标签并分析它的方法后,我想出了如何在每次调整大小时不使用一堆Bitmaps或重新绘制图形的情况下进行scale9Grid.

scale9Grid只影响绘图API图形(或图形对象) - 而不是直接影响Bitmaps.所以你必须将你的位图绘制到Shape或Sprite的图形对象:

shape.graphics.beginBitmapFill(bitmapData);
Run Code Online (Sandbox Code Playgroud)

诀窍是为每个切片单独填充,但仅限第一次:

var rect:Rectangle = new Rectangle(20, 20, 60, 10);
var gridX:Array = [rect.left, rect.right, bitmapData.width];
var gridY:Array = [rect.top, rect.bottom, bitmapData.height];

shape.graphics.clear();

var left:Number = 0;
for (var i:int = 0; i < 3; i++) {
    var top:Number = 0;
    for (var j:int = 0; j < 3; j++) {
        shape.graphics.beginBitmapFill(bitmapData);
        shape.graphics.drawRect(left, top, gridX[i] - left, gridY[j] - top);
        shape.graphics.endFill();
        top = gridY[j];
    }
    left = gridX[i];
}
shape.scale9Grid = rect;
Run Code Online (Sandbox Code Playgroud)

记得做一个endFill()或者它不会起作用.在准备好形状后,你只需要添加你的scale9Grid矩形,你就可以完成所有设置 - 完美的位图缩放,无需额外的显示对象或不断重绘.