我想问,如何在舞台上仅更改实例的填充颜色-我可以使用ColorTransform对象来更改,但它会更改整个实例的颜色,而不仅仅是填充。我只想更改填充颜色,而不是笔触颜色。有人能帮我吗?
这是我的代码:
function paint(){
var myColorTransform:ColorTransform = new ColorTransform();
myColorTransform.color = someColorNumber;
coloredObject.transform.colorTransform = myColorTransform;
}发布于 2009-04-28 07:59:37
一旦你绘制了一个形状,就不能这样做了,因为动作脚本没有办法确定什么是笔触,什么是填充。
您有几个选择。
将填充和描边分离到单独的影片剪辑中,并将颜色变换设置为仅应用于填充。
或
如果它是一个简单的形状,请使用Graphics对象绘制它,您可以在其中指定填充颜色和笔触颜色。
很可能引擎盖是,我首选的方法,将是第一选择,因为形状可能是复杂的,让它留在fla给设计师更大的控制权,能够改变它,而不是开发人员。这是一个稍微多一点的工作,也稍微复杂一些。
发布于 2009-10-01 11:56:15
我知道这个游戏有点晚了,但我也遇到了同样的问题,并以不同的方式修复了它。它可能不会有任何帮助,因为它只在有限的情况下工作*,但我开始与我的形状填充白色和笔划黑色。这样,你就可以使用RGB倍增器应用颜色变换,将白色淡出到你想要的颜色,而保持黑色边框不变。因此,要将对象设置为红色(带黑色边框),请使用:
function paint() {
shape.transform.colorTransform = new ColorTransform(1, 0, 0);
}或者,对于Stack Overflow橙色(仍为黑色边框):
function paint() {
shape.transform.colorTransform = new ColorTransform(0.996, 0.478, 0.082);
}*只有当你只想要黑色边框的单一颜色时,它才会起作用。
发布于 2009-07-02 18:50:19
如果您的目标是FP10,并且您想要一个简单的滤镜,就像您在ColorTransform中尝试的那样,您可以编写一个PixelBlender内核来接受两个颜色参数(一个用于源,一个用于目标),将像素与源颜色进行匹配,并将它们交换为目标颜色;如下所示:
//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();
很抱歉把你的眼睛弄出血了!我想这是我最长的回答了!
https://stackoverflow.com/questions/796671
复制相似问题