Actionscript 3 为什么Flex SolidColorStroke表现得那么怪异?

Actionscript 3 为什么Flex SolidColorStroke表现得那么怪异?,actionscript-3,apache-flex,actionscript,air,adobe,Actionscript 3,Apache Flex,Actionscript,Air,Adobe,我必须解决一个关于flex框架的SolidColorStroke的问题。这个场景很简单,我们有一个可见的对象,我们希望它周围有一个边框。我构建了一个图形组件,它可以绘制图形。该Rect的定义如下 object; // the object which should get the border, defined somewhere outside, // just fyi var borderThickness:Number = 10; rect.x = objec

我必须解决一个关于flex框架的SolidColorStroke的问题。这个场景很简单,我们有一个可见的对象,我们希望它周围有一个边框。我构建了一个图形组件,它可以绘制图形。该Rect的定义如下

object; // the object which should get the border, defined somewhere outside, 
        // just fyi


var borderThickness:Number = 10;    
rect.x = object.x - borderThickness;
rect.y = object.y - borderThickness;
rect.width = object.width + (borderThickness * 2);
rect.height = object.height + (borderThickness * 2);
rectStroke.weight = borderThickness;

//the MXML code
<s:Rect id="rect">
  <s:stroke>
    <s:SolidColorStroke id="rectStroke" />
  </s:stroke>
</s:Rect>
现在,对象的宽度和高度只是增加borderThickness(每边borderThickness的一半)。我认为现在边框应该正好适合对象(正如我在第一个版本中所期望的那样…)

它看起来比第一个版本更好,但仍然覆盖了对象左右的一些部分

经过长时间的思考,为什么它不能像我期望的那样工作,我找到了一个适合我的解决方案。似乎笔划在两侧的增长并不相等,似乎笔划在内侧增长了75%,在外侧增长了25%。下图显示了我的意思。

边框内的黄线显示实际边框(当笔划为1px时)。你可以看到它现在正好在冲程的中间,但是从内侧到75%,从外侧到25%。p> 我的问题是,有没有人经历过类似的行为?有人知道为什么会这样吗。我用对了吗?或者我做错了什么

Adobe的文档并没有真正告诉您SolidColorStroke是这样工作的。如果你需要更多的代码,请告诉我

亲切的问候
马库斯

我尝试了这个,没有问题,只要发送目标,你就会得到边界


我试过了,没有问题,只要发送目标,你就会得到边界。

奇怪。在Flash Pro中或通过绘图API(
drawCircle
etc)创建的对象的正常渲染将笔划精确地居中于标称边界上;因此,名义边界两边各占50%。请注意,
width
height
属性确实考虑了边界范围。感谢您的回答,我还认为应该向两边各增加50%。我花了大约一天的时间才想出上面描述的解决方案,因为这是一个非常奇怪的行为。我需要将宽度和高度扩展到borderThickness*1.5.Odd。在Flash Pro中或通过绘图API(
drawCircle
etc)创建的对象的正常渲染将笔划精确地居中于标称边界上;因此,名义边界两边各占50%。请注意,
width
height
属性确实考虑了边界范围。感谢您的回答,我还认为应该向两边各增加50%。我花了大约一天的时间才想出上面描述的解决方案,因为这是一个非常奇怪的行为。我需要通过borderThickness*1.5扩展宽度和高度。这也是我的初衷。但这似乎不起作用。我也没有右、左、上或下属性的值(它们为空)。我只有x和y坐标以及宽度和高度。谢谢,这个方法很有效!我仍然不知道笔划的内部增长了75%,内部增长了25%,但你的方法满足了我的需要,我实际上比我的版本更喜欢它。当你缩放时,它不能正常工作。有时边界缺失。有解决办法吗?这也是我的初衷。但这似乎不起作用。我也没有右、左、上或下属性的值(它们为空)。我只有x和y坐标以及宽度和高度。谢谢,这个方法很有效!我仍然不知道笔划的内部增长了75%,内部增长了25%,但你的方法满足了我的需要,我实际上比我的版本更喜欢它。当你缩放时,它不能正常工作。有时边界缺失。有解决办法吗?
rect.width = object.width + borderThickness;
rect.height = object.height + borderThickness;
<s:Group width="250" height="250" x="50" y="50">
    <!--Normally borders grows inside so for ex: top should be equal to -weight of the stroke -->
    <s:Rect top="-10" left="-10" right="-10" bottom="-10">
        <s:stroke>
            <s:SolidColorStroke weight="10" color="0x00FF00"/>
        </s:stroke>
    </s:Rect>

    <s:Rect top="0" left="0" right="0" bottom="0">
        <s:stroke>
            <s:SolidColorStroke weight="1"/>
        </s:stroke>
    </s:Rect>
</s:Group>
        private function drawSimpleBorders(obj:UIComponent, tickness:Number = 5):void
        {
            var gr:Graphics = obj.graphics;

            gr.lineStyle(tickness,0,alpha);

            var k:Number = tickness/2;

            gr.drawRect(-k,-k, obj.width+tickness, obj.height+tickness);
        }