Как заполнить полигон actioncript 3 сплошным цветом? - PullRequest
1 голос
/ 09 октября 2009

Я строю редактор карт для проекта и мне нужно нарисовать шестиугольник и залить его сплошным цветом. У меня правильная форма, но я не могу понять, как ее заполнить. Я подозреваю, что это может быть связано с тем, является ли вещь 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);
    }
}

Ответы [ 2 ]

6 голосов
/ 09 октября 2009

Класс 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 голос
/ 09 октября 2009

Я положу это здесь, потому что ответ на это как комментарий к Гленну выходит за пределы персонажа. Мой файл 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);
...