我试图在圆角矩形周围画一个红色笔划(1个厚度)但是笔划没有正确地围绕圆角排列。
我的圆角矩形的圆角有一个椭圆宽度和38的椭圆高度,因为它们是相等的,我有信心假设每个角的曲率都从角落大小的一半开始。因此,不是将我的笔划一直画到角落,而是在角落之前以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);
答案 0 :(得分:1)
为什么不使用drawRoundRect绘制笔划?或者使用弯曲填充?或者设置笔划,设置填充和THEN drawRoundRect?
好的,然后查看此代码:
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);
这是计算宽度和高度的有趣方式的问题。每当你想在某个形状的最后一个像素上放置一些东西时,你必须把它放在一个位置x +宽度 - 1!我不确定它是否完美,但是从我能看到的它确实看起来很有希望。
我保持rectWidthS
和rectHeightS
值不变,但在修改为rectCornersS = 40
后,它似乎完美无缺。看看http://img137.imageshack.us/img137/7779/58480490.png。或者我没有看到什么。我理解它仍然可能无法与更复杂的形状完美配合,但它应该是可行的足够的工作。