我还没有习惯Flash IDE环境,所以我在FlashDevelop中编写纯代码。我得到了各种图形 Assets 的 Sprite ,其中之一旨在与非常有用的 scale9Grid 功能一起使用......它不起作用。因为我是第一次这样做,我以为我搞砸了什么,但后来我尝试了 drawRoundRect 和 beginFill(而不是 beginBitmapFill),它按预期工作。我的逻辑想法是它不适用于位图(尽管在 Adobe Livedocs 示例中他们使用猩猩的图片来演示 scale9Grid 功能)。
在那之后,我阅读了各种意见,从“它工作得很好”开始,并以“它不起作用,去你的 Adobe”结束。所以我现在很好奇,它有效还是无效?
我已经找到了如何在 Embed 语句中指定 scale9Grid 参数,但我的嵌入图像是 Sprite 。我想无论如何它都行不通,对吧?
最佳答案
在深入研究 [Embed] 标签并分析它的方法后,我想出了如何在没有一堆位图或每次调整大小时重新绘制图形的情况下执行 scale9Grid。
scale9Grid 仅影响绘图 API 图形(或 Graphics 对象) - 而不是直接影响位图。因此,您必须将位图绘制到 Shape 或 Sprite 的图形对象上:
shape.graphics.beginBitmapFill(bitmapData);
诀窍是为每个切片做一个单独的填充,但只是第一次:
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;
记住做一个 endFill() 否则它不会工作。准备好形状后,您只需要添加 scale9Grid Rectangle 就可以了 - 完美的位图缩放,无需额外的显示对象或不断重绘。
关于flash - scale9Grid 和位图 - 它们是否一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4408496/