我试图在一个圆形的矩形周围绘制红色中风(1厚),但中风并未在圆角周围正确排队。

我的圆形矩形的角落的椭圆宽度和椭圆形为40。因此,与其将我的笔画一路绘制到角落,而是在拐角处以20像素的方式结束笔触,然后将其弯曲到拐角后的20像素。清晰像泥吗?

有趣的是,如果我按照相同的代码在圆形的矩形周围绘制中风,则中风只在这两个角落围绕着不准确。另外,如果中风增加到2,则间隙不再可见。

//Rounded Rectangle
var rectWidth:uint = 300;
var rectHeight:uint = 100;
var rectCorners:uint = 40;

var rect:Shape = new Shape();
rect.graphics.beginFill(0);
rect.graphics.drawRoundRect(-rectWidth / 2, -rectHeight / 2, rectWidth, rectHeight, rectCorners, rectCorners);

//Stroke
var stroke:Shape = new Shape();
stroke.graphics.lineStyle(1, 0xFF0000, 1, true, "normal", "none", "miter", 3);

//Stroke Around Top Right Corner
stroke.graphics.moveTo(rect.x + rectWidth / 2 - rectCorners / 2, rect.y - rectHeight / 2);
stroke.graphics.curveTo(rect.x + rectWidth / 2, rect.y - rectHeight / 2, rect.x + rectWidth / 2, rect.y - rectHeight / 2 + rectCorners / 2);

//Stroke Around Bottom Right Corner  
stroke.graphics.lineTo(rect.x + rectWidth / 2, rect.y + rectHeight / 2 - rectCorners / 2);
stroke.graphics.curveTo(rect.x + rectWidth / 2, rect.y + rectHeight / 2, rect.x + rectWidth / 2 - rectCorners / 2, rect.y + rectHeight / 2);

//Add To Display List
addChild(rect);
addChild(stroke);

alt text


更新

圆形矩形越大,它的角落就越流离失所。我不再相信我的Curveto()功能的曲率/锚点是正确的。有什么想法吗?alt text

有帮助吗?

解决方案

您为什么不使用DrawRoundRect绘制中风?还是使用弯曲进行填充?或设置笔触,设置填充然后绘制RoundRect?


好,然后检查此代码:

        var rectWidth:Number = 300;
        var rectHeight:Number = 100;
        var rectCorners:Number = 40;

        var rectWidthS:Number = 300 - 1;
        var rectHeightS:Number = 100 - 1;
        var rectCornersS:Number = 40 - 1;

        var rect:Shape = new Shape();
        rect.graphics.beginFill(0);
        rect.graphics.drawRoundRect(0, 0, rectWidth, rectHeight, rectCorners, rectCorners);

        //Stroke
        var stroke:Shape = new Shape();
        stroke.graphics.lineStyle(1, 0xFF0000, 1, true, "normal", "none", "miter", 3);

        //Stroke Around Top Right Corner
        stroke.graphics.moveTo (rectWidthS - rectCornersS / 2, 0);
        stroke.graphics.curveTo(rectWidthS,                   0, rectWidthS, rectCornersS / 2);

        //Stroke Around Bottom Right Corner  
        stroke.graphics.lineTo (rectWidthS,                   rectHeightS - rectCornersS / 2);
        stroke.graphics.curveTo(rectWidthS, rectHeightS, rectWidthS - rectCornersS / 2, rectHeightS);

这是一个有趣的方法来计算宽度和高度的问题。每当您想将某些东西放在某种形状的最后像素上时,就必须将其放在postion x +宽度上 - 1! 我不确定它是否完美,但是从我看来,它看起来确实很有希望。


我离开了 rectWidthSrectHeightS 值未触及,但是修改为 rectCornersS = 40, ,它似乎很好地工作。看一看 http://img137.imageshack.us/img137/7779/58480490.png. 。或者我看不到一些东西。我知道,尽管它的形状更复杂,但它可能仍然无法完美地工作,但是在足够的工作中应该是可行的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top