Flash绘图API中的边框线是在形状内部还是外部绘制的?

时间:2010-05-03 13:43:42

标签: flex flash graphics css

当我在ActionScript中绘制矩形等时,使用Flash Player的绘图API(即Graphics类),是在形状的外部还是内部绘制的该形状的边界线?例如,下列哪个图正确地描绘了在自定义组件中绘制内容区域边框的矩形?

Flash drawing question

我看了documentation for the Graphics class,找不到任何提示。

1 个答案:

答案 0 :(得分:2)

我写了一个简短的测试,使用固定大小的自定义组件,绘制一些线作为参考,然后在白色背景上绘制一个30像素宽边框的矩形。这就是它的样子,见下面的代码:

Flash graphics test

因此,参考问题中的图片,第二个图(“居中”)正确描绘了Flash Player绘制的方式。

还要注意内线(45像素)是如何在矩形内部,而外线(15像素)与矩形的外部边界对齐。

这是测试应用程序的代码:

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:test="*">
    <test:TestCanvas horizontalCenter="0" verticalCenter="0" id="canvas" />
</mx:Application>

这是TestCanvas组件:

public class TestCanvas extends UIComponent
{
    public function TestCanvas()
    {
        super();
    }

    override protected function measure():void
    {
        super.measure();
        this.measuredWidth = this.minWidth = 300;
        this.measuredHeight = this.minHeight = 300;
    }

    override protected function updateDisplayList(w:Number, h:Number):void
    {
        super.updateDisplayList(w, h);
        this.graphics.clear();

        this.graphics.lineStyle(undefined);
        this.graphics.beginFill(0xffffff);
        this.graphics.drawRect(0, 0, w, h);
        this.graphics.endFill();

        this.graphics.lineStyle(0, 0xff0000, 0.5);
        this.graphics.moveTo(0, 15);
        this.graphics.lineTo(300, 15);
        this.graphics.moveTo(0, 45);
        this.graphics.lineTo(300, 45);
        this.graphics.moveTo(15, 0);
        this.graphics.lineTo(15, 300);
        this.graphics.moveTo(45, 0);
        this.graphics.lineTo(45, 300);

        this.graphics.lineStyle(0, 0xff0000, 0.75);
        this.graphics.moveTo(0, 30);
        this.graphics.lineTo(300, 30);
        this.graphics.moveTo(30, 0);
        this.graphics.lineTo(30, 300);

        this.graphics.lineStyle(30, 0x0000ff, 0.25, false, "normal", null, JointStyle.MITER);
        this.graphics.drawRect(30, 30, 240, 240);
    }