【发布时间】:2026-01-25 18:00:01
【问题描述】:
我正在扩展Loader(),是否可以在不借助一些技巧的情况下在内容周围绘制边框?我知道 Loader 不能有任何额外的孩子,否则我只会为内容大小创建一个形状并添加它。但是有没有办法强制或强制转换内容对象以便在其上使用绘图 API?
【问题讨论】:
标签: apache-flex flash actionscript-3
我正在扩展Loader(),是否可以在不借助一些技巧的情况下在内容周围绘制边框?我知道 Loader 不能有任何额外的孩子,否则我只会为内容大小创建一个形状并添加它。但是有没有办法强制或强制转换内容对象以便在其上使用绘图 API?
【问题讨论】:
标签: apache-flex flash actionscript-3
通常,您只需在加载时将内容添加到显示对象并根据需要对其进行操作:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, eventCompleteHandler);
loader.load(new URLRequest(URL));
function eventCompleteHandler(event:Event):void
{
addChild(createElementWithBorder(event.target.content));
}
function createElementWithBorder(content:DisplayObject):DisplayObject
{
var container:Sprite = new Sprite();
container.addChild(content);
var border:Shape = container.addChild(new Shape()) as Shape;
border.graphics.lineStyle(2,0x000000);
border.graphics.drawRect(0, 0, content.width,content.height);
return container;
}
...但是如果您仍然对不能将 Loader 用作 DisplayObjectContainer 感到恼火,使用合成可能是线索(以下只是一个简单的示例,当然需要适应):
public class LoaderBorder extends Sprite
{
private var loader:Loader;
public function LoaderBorder()
{
loader = new Loader()
}
public function load(url:String):void
{
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, eventCompleteHandler);
loader.load(new URLRequest(url));
}
private function eventCompleteHandler(event:Event):void
{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, eventCompleteHandler);
var content:DisplayObject = event.target.content;
var border:Shape = new Shape();
border.graphics.lineStyle(2,0x000000);
border.graphics.drawRect(0, 0, content.width,content.height);
addChild(content);
addChild(border);
}
}
像加载器一样使用:
var test:LoaderBorder = new LoaderBorder()
addChild(test);
test.load(URL);
【讨论】:
是的,您可以投射加载器的内容。 当您加载图像时,您可以这样做(在图像完全加载后):
Bitmap(yourLoader.content);
如果使用 SWF,我认为您可以做到这一点(尚未测试):
Sprite(yourLoader.content);
【讨论】:
您可以将过滤器添加到包含加载器的movieClip。
我认为“发光”或“投影”可能是一个很好的效果。如果你设置正确。
【讨论】: