是否可以使用Flex旋转动态添加的行?

时间:2009-05-27 14:47:15

标签: flex

我正在使用canvas.moveTo(0, 0); canvas.lineTo(100, 100);向画布添加一行,但我希望用户移动鼠标以设置该行的旋转。 Google建议使用rotation属性,但我没有对该行对象的引用。我可以获得对该线的引用,还是应该旋转整个画布?这有可能吗?

3 个答案:

答案 0 :(得分:2)

通常你操纵绘制图形的表面 - 通常是一个Sprite实例,因为它非常轻巧,非常适合任务。如果您创建了一个新的Sprite,使用其Graphics对象绘制线条,形状等,将Sprite添加到UIComponent - 您无法直接将Sprite添加到Canvas而不将其首先包装在UIComponent实例中 - - 然后将UIComponent添加到您的Canvas中,您可以通过旋转,移动等直接操作Sprite。

这通常是通过覆盖createChildren()(如果对象打算在组件实例的持续时间内存活)或使用其他方法(取决于您的需要)来完成的。例如:

override protected function createChildren():void
{
    super.createChildren();

    // Create a new Sprite and draw onto it
    var s:Sprite = new Sprite();
    s.graphics.beginFill(0, 1);
    s.graphics.drawRect(0, 0, 20, 20);
    s.graphics.endFill();

    // Wrap the Sprite in a UIComponent
    var c:UIComponent = new UIComponent();
    c.addChild(s);

    // Rotate the Sprite (or UIComponent, whichever your preference)
    s.rotation = 45;

    // Add the containing component to the display list
    this.addChild(c);
}

希望它有所帮助!

答案 1 :(得分:1)

嗯......在画布上添加一个Sprite,然后将线条绘制到Sprite的图形对象上。然后你可以旋转Sprite等。如果你愿意,你可以 旋转画布,但是如果你只是把它当作一个Sprite来创建一个画布是额外的开销(注意Canvas扩展在链的某个地方精灵。)

从ASDocs看一下这个例子:Rotating things

答案 2 :(得分:1)

什么是canvas(实际的Canvas没有lineTo()或moveTo()方法)?

好像你可能正在操纵Canvas的图形对象。在这种情况下,你最好做以下

private var sp : Sprite;
//canvas is whatever Canvas you wish to add the sprite to
private function addLine(canvas : Canvas) : void {
sp = new Sprite();
/* Do the drawing of the sprite here,
   such as sp.graphics.moveTo or sp.graphics.lineTo */
sp.rotation = 45;
canvas.rawChildren.addChild(sp);
}

然后,只要您想要更改旋转,只需更新sp.rotation(现在在画布中)