2009-10-08 5 views
1

Я создаю редактор карт для проекта и должен нарисовать шестиугольник и заполнить его сплошным цветом. У меня правильная форма, но для меня жизнь не может понять, как ее заполнить. Я подозреваю, что это может быть связано с тем, является ли вещь Shape, Sprite или UIComponent. Вот что у меня есть для самого полигона:Как заполнить многоугольник actioncript 3 сплошным цветом?

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

Если у вас есть доступ к коду com.Polygon class, добавьте graphics.beginFill (цвет, альфа) до начала рисования. – Amarghosh

+0

Я пробовал это сделать, используя класс com.polygon. В то время как он все еще отображал контур шестнадцатеричного кода, он не заполнял гекс. Я попробовал несколько мест, включая добавление информации о заполнении в polygon.as, но это не сработало. –

ответ

6

Класс Polygon не является стандартной библиотеки Adobe, так что я не знаю специфику. Однако, предполагая, что он использует стандартный API-интерфейс Flash, не должно быть проблем с добавлением некоторого кода для расширения функции. Вам просто нужно убедиться, что вы делаете 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

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