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矩形,你就可以完成所有设置 - 完美的位图缩放,无需额外的显示对象或不断重绘.
| 归档时间: |
|
| 查看次数: |
5160 次 |
| 最近记录: |