我正在为项目构建地图编辑器,需要绘制六边形并用纯色填充它。我的形状是正确的但是对于我的生活无法弄清楚如何填充它。我怀疑这可能是因为这个东西是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);
}
}
答案 0 :(得分:6)
Polygon类不是标准的Adobe库,所以我不知道具体细节。但是,假设它使用标准的Flash API,添加一些代码来扩展函数应该没有问题。您只需要确保在graphics.beginFill
/ graphics.lineTo
函数之前执行graphics.moveTo
。然后以graphics.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();
这将绘制一个填充.4红色的三角形。
答案 1 :(得分:1)
我会把它放在这里因为回答它作为对格伦的评论超过了角色限制。我的actionscript文件扩展了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);