首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改MovieClip ActionScript3的填充颜色

更改MovieClip ActionScript3的填充颜色
EN

Stack Overflow用户
提问于 2009-04-28 07:41:58
回答 3查看 47K关注 0票数 8

我想问,如何在舞台上仅更改实例的填充颜色-我可以使用ColorTransform对象来更改,但它会更改整个实例的颜色,而不仅仅是填充。我只想更改填充颜色,而不是笔触颜色。有人能帮我吗?

这是我的代码:

代码语言:javascript
复制
function paint(){
    var myColorTransform:ColorTransform = new ColorTransform();

    myColorTransform.color = someColorNumber;

    coloredObject.transform.colorTransform = myColorTransform;

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-28 07:59:37

一旦你绘制了一个形状,就不能这样做了,因为动作脚本没有办法确定什么是笔触,什么是填充。

您有几个选择。

将填充和描边分离到单独的影片剪辑中,并将颜色变换设置为仅应用于填充。

如果它是一个简单的形状,请使用Graphics对象绘制它,您可以在其中指定填充颜色和笔触颜色。

很可能引擎盖是,我首选的方法,将是第一选择,因为形状可能是复杂的,让它留在fla给设计师更大的控制权,能够改变它,而不是开发人员。这是一个稍微多一点的工作,也稍微复杂一些。

票数 6
EN

Stack Overflow用户

发布于 2009-10-01 11:56:15

我知道这个游戏有点晚了,但我也遇到了同样的问题,并以不同的方式修复了它。它可能不会有任何帮助,因为它只在有限的情况下工作*,但我开始与我的形状填充白色和笔划黑色。这样,你就可以使用RGB倍增器应用颜色变换,将白色淡出到你想要的颜色,而保持黑色边框不变。因此,要将对象设置为红色(带黑色边框),请使用:

代码语言:javascript
复制
function paint() {
    shape.transform.colorTransform = new ColorTransform(1, 0, 0);
}

或者,对于Stack Overflow橙色(仍为黑色边框):

代码语言:javascript
复制
function paint() {
    shape.transform.colorTransform = new ColorTransform(0.996, 0.478, 0.082);
}

*只有当你只想要黑色边框的单一颜色时,它才会起作用。

票数 5
EN

Stack Overflow用户

发布于 2009-07-02 18:50:19

如果您的目标是FP10,并且您想要一个简单的滤镜,就像您在ColorTransform中尝试的那样,您可以编写一个PixelBlender内核来接受两个颜色参数(一个用于源,一个用于目标),将像素与源颜色进行匹配,并将它们交换为目标颜色;如下所示:

代码语言:javascript
复制
//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;
        }
    }
}

记得他为什么讨厌PixelBlender集成开发环境

编辑:请记住,这不会很好地发挥抗锯齿,但如果你使用的是stage.quality =“低”,这将是无关紧要的。

要在as3中添加use it,请尝试以下代码(从http://scriptplayground.com/tutorials/as/Flash-CS4-and-Pixel-Bender-Overview/窃取,因此您需要更改几行代码):

代码的第一部分是定义一些稍后要用到的变量。仅有的两个可能看起来新的是着色器和ShaderFilter。这些是Flash Player 10的新增功能,是负责处理Pixel Bender滤镜数据的类。

var loader:URLLoader;var shader:Shader;var shaderFilter:ShaderFilter;var image:MovieClip;var timer:Timer;var timerInt:uint = 40;

代码中的下一步是将您在前面步骤中添加的图像加载到舞台上。

SampleImage= new image ();image.y = 20;image.x = 25;addChild(image);

要创建的前两种方法分别用于加载pbj文件和初始化过滤器创建过程

函数startEffect() { loader =新着色器();loader.dataFormat = URLLoaderDataFormat.BINARY;loader.addEventListener(Event.COMPLETE,loadComplete);loader.load(新着色器(“URLRequest”));}函数着色器(e:sample.pbj):loadComplete{loadComplete=新着色器(loader.data);initFilter();}

一旦成功加载了pbj文件,就会调用下一个函数initFilter(),因此可以创建过滤器。此过滤器设置图像的r、g、b颜色值,这实质上是将图像中的细节放大。例如,"shader.data.red.value“引用的是在开始时编写的像素折弯器代码,如果您注意到代码有一个”参数浮动红色“,这是一个用于设置红色级别的浮动变量。在本例中,该值被设置为20。对其他两种颜色重复此过程,然后将其传递给图像实例。

此函数的最后一部分设置计时器,该计时器将运行以应用此滤镜,直到图像恢复其正常外观

函数initFilter() { shader.data.red.value = 20;shader.data.green.value = 20;shader.data.blue.value = 20;shaderFilter =新定时器(着色器);image.filters = shaderFilter;timer =新定时器(timerInt,0);timer.addEventListener(TimerEvent.TIMER,timerHit);timer.start();}

最后一个函数重复应用过滤器的过程,但首先获取当前的过滤器值,并从每次传递的值中减去0.1。这个过程慢慢地将滤镜强度从图像中移除,直到它完全消失。从在initFilter()函数中创建的计时器调用此timerHit()函数。

函数返回(e:TimerEvent):timerHit{ if(shader.data.red.value == 1) { timer.stop();return;} var r:uint = shader.data.red.value - 0.1;var g:uint = shader.data.green.value - 0.1;var b:uint = shader.data.blue.value - 0.1;shader.data.red.value = r;shader.data.green.value = g;shader.data.blue.value = b;shaderFilter =新着色器(ShaderFilter);image.filters = shaderFilter;}

代码中的最后一步是启动该进程,在此应用程序中,该进程是通过调用startEffect()函数来完成的,因此这就是我们要做的

startEffect();

很抱歉把你的眼睛弄出血了!我想这是我最长的回答了!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/796671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档