根据要求,我将对问题进行更详细的描述......
首先我有这个MXML:
<mx:Panel x="270" y="10" width="690" height="680" id="mainContainerPanel">
<mx:Canvas x="270" y="10" width="670" height="640" id="canvas" initialize="onInit()">
<mx:Script>
protected function onInit():void
{
spiro = new Spirograph(canvas);
}
</mx:Script>
</mx:Canvas>
</mx:Panel>
这会将标记对象传递给我的主AS3类文件的构造函数。这工作正常,在我的构造函数中:
function Spirograph(canvas:Canvas):void
{
mainContainer = canvas;
mainContainer.graphics.beginFill(0xFFFFFF);
mainContainer.graphics.drawRect(0, 0, 670, 640);
mainContainer.graphics.endFill();
}
目前,我正在使用名为SpriteUIContainer的包装类将所有Sprite对象添加到mainContainer中:
package includes
{
import flash.display.Sprite;
import mx.core.UIComponent;
public class SpriteUIContainer extends UIComponent
{
public function SpriteUIContainer(sprite:Sprite)
{
super();
this.explicitWidth = sprite.width;
this.explicitHeight = sprite.height;
this.x = sprite.x;
this.y = sprite.y;
addChild(sprite);
}
}
}
以下列方式使用:
private var circCentre:Sprite = new Sprite();
circCentre.x = mainContainer.width / 2;
circCentre.y = mainContainer.height / 2;
circCentre.graphics.lineStyle(3, 0xD0B917);
circCentre.graphics.beginFill(0xF2DF56, 0.2);
circCentre.graphics.drawCircle(20, 20, 50);
circCentre.graphics.endFill();
mainContainer.addChildAt(new SpriteUIContainer(circCentre), 1);
circCentre Sprite从未出现在屏幕上,我不明白我是如何让它出现的。
非常感谢任何帮助!
答案 0 :(得分:1)
通过'附加',你的意思是你是使用addChild方法向UIComponent添加新的精灵?
如果是这样;你必须添加代码来确定大小,并将新的'sprite'相对于容器中的其他对象定位。您的示例中没有此类代码。我建议在updateDisplayList()中实现此代码。
有关updateDisplayList()的更多信息,请参阅此Flex Component Lifecycle文档。
如果您需要更多帮助,则必须扩展如何向UIComponent实例添加新精灵;并且可能会显示一个添加多个示例的示例。