代码之家  ›  专栏  ›  技术社区  ›  James McMahon

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

  •  2
  • James McMahon  · 技术社区  · 14 年前

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

    Flash drawing question

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    8 年前

    我写了一个简短的测试,使用一个具有固定大小的自定义组件,绘制一些线条作为参考,然后在白色背景上绘制一个具有30像素宽边框的矩形。如下所示,代码如下:

    Flash graphics test

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

    还要注意内部线条(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);
        }