Question

Je veux demander comment changer remplir seulement la couleur d'une instance sur la scène - je peux le faire en utilisant l'objet ColorTransform, mais il change de couleur de l'instance, pas seulement le remplissage. Je veux changer que la couleur de remplissage, pas la couleur de la course. quelqu'un peut me aider?

est mon code:

function paint(){
    var myColorTransform:ColorTransform = new ColorTransform();

    myColorTransform.color = someColorNumber;

    coloredObject.transform.colorTransform = myColorTransform;

}
Était-ce utile?

La solution

Ce ne peut pas être fait une fois que vous avez dessiné une forme en tant que script d'action n'a aucun moyen de déterminer ce qui est un accident vasculaire cérébral et ce qui est un remplissage.

Vous avez deux options.

Séparez votre remplissage et la course dans des clips séparés et définir la couleur transformation à appliquer uniquement au remplissage.

ou

Si c'est une forme simple, dessiner en utilisant l'objet graphique où vous pouvez spécifier des couleurs de remplissage et les couleurs de trait.

capot est probable, et ma méthode préférée, seraient les premières options que la forme est susceptible d'être complexe et en le laissant dans le fla donne un meilleur contrôle pour un designer pouvoir changer plutôt qu'un développeur. Il est un peu plus de travail bien et un peu plus complexe.

Autres conseils

Je sais que c'est un peu tard pour le jeu, mais je faisais ce même problème et il fixe un peu différemment. Il ne peut être d'aucune aide car elle ne fonctionnera que dans des circonstances limitées *, mais j'ai commencé avec ma forme étant rempli blanc et noir frotté. De cette façon, vous pouvez appliquer une transformation de couleur avec des multiplicateurs RVB, pour estomper le blanc jusqu'à la couleur désirée en laissant la bordure noire intacte. Donc, pour faire de votre objet rouge (avec bordure noire), utilisez:

function paint() {
    shape.transform.colorTransform = new ColorTransform(1, 0, 0);
}

Ou pour débordement de la pile orange (toujours avec bordure noire):

function paint() {
    shape.transform.colorTransform = new ColorTransform(0.996, 0.478, 0.082);
}

* Ça ne fonctionnera que si vous voulez juste une seule couleur avec une bordure noire.

Si vous ciblez FP10, et que vous voulez un filtre simple comme ce que vous avez essayé avec ColorTransform, vous pouvez écrire un PixelBlender noyau pour prendre un 2 arguments de couleurs (une pour la source, un pour la destination), correspondent au pixel à la couleur source, et de les échanger pour la destination; quelque chose comme ceci:

//I release this under the MIT License. Use it to your heart's content.

<languageVersion : 1.0;>

kernel ReplaceColor
<   namespace : "PIPEEP";
    vendor : "PiPeep";
    version : 1;
    description : "Replace color";
>
{
    input image4 src;
    output pixel4 dst;

    parameter pixel4 sColor
    < 
        minValue:pixel4(0.); 
        maxValue:pixel4(255.);
    >; 
    parameter pixel4 dColor;
    parameter float tolerance;

    void
    evaluatePixel()
    {
        dst = sampleNearest(src,outCoord());
        pixel4 sColorAdjusted = abs((sColor/pixel4(255.)) - dst);
        if(sColorAdjusted.r < tolerance && sColorAdjusted.g < tolerance && sColorAdjusted.b < tolerance && sColorAdjusted.a < tolerance) {
            dst = dColor;
        }
    }
}

se souvient pourquoi il déteste l'PixelBlender IDE

EDIT:. Rappelez-vous que cela ne joue pas bien avec l'anti-aliasing, mais si vous utilisez Stage.quality = « faible », il ne sera pas question

Pour ajouter l'utiliser dans AS3, essayez ceci (volé

scroll top