2009-10-08 5 views
1

Je construis un éditeur de cartes pour un projet et j'ai besoin de dessiner un hexagone et de le remplir avec une couleur unie. J'ai la forme correcte mais pour la vie de moi ne peux pas comprendre comment le remplir. Je soupçonne que cela peut être dû au fait que la chose soit une forme, un sprite ou un composant de l'UIC. Voici ce que j'ai pour le polygone lui-même:Comment remplir un polygone actionscript 3 avec une couleur unie?

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

Si vous avez accès au code de la classe com.Polygon, ajoutez un graphics.beginFill (couleur, alpha) avant le début du dessin. – Amarghosh

+0

J'ai essayé de le faire en utilisant la classe com.polygon. Alors qu'il restait le contour de l'hex, il ne remplirait pas l'hex. J'ai essayé plusieurs endroits, y compris en ajoutant l'information de remplissage à polygon.as mais cela ne fonctionnerait pas. –

Répondre

6

La classe Polygon n'est pas une bibliothèque standard d'Adobe, donc je ne connais pas les détails. Cependant, en supposant qu'il utilise l'API flash standard, il ne devrait pas y avoir de problème pour ajouter du code pour étendre la fonction. Vous avez juste besoin de vous assurer que vous faites un graphics.beginFill avant les fonctions graphics.lineTo/graphics.moveTo. Et puis terminer avec graphics.endFill.

par exemple,

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(); 

Cela dessiner un triangle rempli de 0,4 rouge.

1

Je vais mettre ceci ici parce que le répondre comme un commentaire à Glenn dépasse la limite de caractères. Mon fichier actionscript étend UIComponent. Quand j'ai créé une variable hexPoly: Polygon = new Polygon; cela rendrait le contour de l'hexagone, mais ne le remplirait pas, peu importe ce que je faisais. J'ai examiné polygon.as et dupliqué les méthodes, mais comme un sprite et cela a fonctionné. Donc, j'ai besoin de comprendre comment envelopper le polygone en tant que sprite, ou simplement le laisser tel quel.

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);