ActionScript-不准确的图形?
-
28-09-2019 - |
题
我试图在一个圆形的矩形周围绘制红色中风(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);
更新
圆形矩形越大,它的角落就越流离失所。我不再相信我的Curveto()功能的曲率/锚点是正确的。有什么想法吗?
解决方案
您为什么不使用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! 我不确定它是否完美,但是从我看来,它看起来确实很有希望。
我离开了 rectWidthS
和 rectHeightS
值未触及,但是修改为 rectCornersS = 40
, ,它似乎很好地工作。看一看 http://img137.imageshack.us/img137/7779/58480490.png. 。或者我看不到一些东西。我知道,尽管它的形状更复杂,但它可能仍然无法完美地工作,但是在足够的工作中应该是可行的。
不隶属于 StackOverflow