在Flex 4 / AS3 addchild问题中绘制形状

时间:2010-03-31 00:42:57

标签: flex actionscript-3 flex4 flash-builder

我只是想使用flex4在面板内绘制一个矩形。我使用spark而不是mx。它抱怨addchild被addelement取代;但是,addelement需要类型ivisualcomponent。我认为精灵应该属于那种类型;但是,它在尝试使用以下代码时报告错误...我尝试了几种不同的方法。我想我错过了关于flex 4的一些非常基本的东西。任何启示都会非常感激! :-D

private function drawRectangle(e:MouseEvent):void{
    var s:Sprite = new Sprite();
    s.graphics.beginFill(0x00ff00, 0.5);
    s.graphics.drawRect(e.localX,e.localY,50,50);
    s.graphics.endFill();
    canvas.addChild(s);
}

3 个答案:

答案 0 :(得分:4)

Sprite没有实现IVisualComponent。 (查看文档:{​​{3}})

您需要添加一个UIComponent来保存精灵。 类似的东西:

private function drawRectangle(e:MouseEvent) : void {
    var s:Sprite = new Sprite();
    var c:UIComponent = new UIComponent();

    c.addChild(s);
    canvas.addChild(c);
}

答案 1 :(得分:3)

是的,我们也可以使用MXML语法。但是在AS3中,您需要使用SpriteVisualElement类。

var sp:SpriteVisualElement = new SpriteVisualElement();
this.addElement(sp);
sp.graphics.beginFill(0x00ff00,1);
sp.graphics.drawRoundRect(10,10,100,100,150,150);
sp.graphics.endFill();

它会起作用。

答案 2 :(得分:0)

请注意,您也可以使用MXML图形执行此操作:

<?xml version="1.0" encoding="utf-8"?>
<!-- fxg/GraphicCompMainMXML.mxml -->
<s:Application backgroundColor="0xFFFFFF"      
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark">
    <s:Graphic>    
         <s:Rect id="rect1" width="200" height="200">
              <s:fill>
                 <s:SolidColor color="0xFFFFCC"/>
              </s:fill>
              <s:stroke>
                 <s:SolidColorStroke color="0x660099" weight="2"/>
              </s:stroke>
         </s:Rect>
    </s:Graphic>
</s:Application>