1

我正在为一个项目构建一个地图编辑器,需要绘制一个六边形并用纯色填充它。我的形状是正确的,但对于我的生活来说,我无法弄清楚如何填充它。我怀疑这可能是由于该事物是 Shape、Sprite 还是 UIComponent。这是我对多边形本身的看法:

import com.Polygon;
import mx.core.UIComponent;

public class greenFillOne extends UIComponent {
    public var hexWidth:Number = 64;
    public var hexLength:Number = 73;

    public function greenFillOne() {
        var hexPoly:Polygon = new Polygon;
        hexPoly.drawPolygon(40,6,27+(hexWidth*.25),37,0x499b0e,1,30);
        addChild(hexPoly);
    }
}
4

2 回答 2

6

Polygon 类不是标准的 Adob​​e 库,所以我不知道具体情况。但是,假设它使用标准的flash API,添加一些代码来扩展功能应该是没有问题的。您只需要确保您在/功能graphics.beginFill之前 执行了 a 。然后以.graphics.lineTographics.moveTographics.endFill

例如,

var g:Graphics = someShape.graphics;
g.beginFill(0xFF0000,.4); // red, .4 opacity 
g.moveTo(x1,y1);
g.lineTo(x2,y2);
g.lineTo(x3,y3);
g.lineTo(x1,y1);
g.endFill();

这将绘制一个填充 0.4 红色的三角形。

于 2009-10-08T22:31:03.680 回答
1

我将其放在这里是因为将其作为对 Glenn 的评论回答超出了字符数限制。我的动作脚本文件扩展了 UIComponent。当我创建一个变量 hexPoly:Polygon = new Polygon; 它会渲染十六进制的轮廓,但无论我做什么都不会填充它。我检查了 polygon.as 并复制了这些方法,但是作为一个精灵并且它起作用了。所以,我需要弄清楚如何将多边形包装为精灵,或者保持原样。

var hexPoly:Sprite = new Sprite;
hexPoly.graphics.beginFill(0x4ea50f,1);
hexPoly.graphics.moveTo(xCenter+(hexWidth*.25)+Math.sin(radians(330))*radius,offset+(radius-Math.cos(radians(330))*radius));
hexPoly.graphics.lineTo(xCenter+(hexWidth*.25)+Math.sin(radians(30))*radius,offset+(radius-Math.cos(radians(30))*radius));
hexPoly.graphics.lineTo(xCenter+(hexWidth*.25)+Math.sin(radians(90))*radius,offset+(radius-Math.cos(radians(90))*radius));
hexPoly.graphics.lineTo(xCenter+(hexWidth*.25)+Math.sin(radians(150))*radius,offset+(radius-Math.cos(radians(150))*radius));
hexPoly.graphics.lineTo(xCenter+(hexWidth*.25)+Math.sin(radians(210))*radius,offset+(radius-Math.cos(radians(210))*radius));
hexPoly.graphics.lineTo(xCenter+(hexWidth*.25)+Math.sin(radians(270))*radius,offset+(radius-Math.cos(radians(270))*radius));
hexPoly.graphics.endFill();
addChild(hexPoly);
于 2009-10-09T16:11:45.817 回答