gpt4 book ai didi

actionscript-3 - 如何切换影片剪辑的颜色?

转载 作者:行者123 更新时间:2023-12-03 01:35:23 25 4
gpt4 key购买 nike

假设我在舞台上有一个影片剪辑。每次单击此影片剪辑时,我希望它改变颜色,但如果再次单击,我希望它重新着色(再次变为白色)。更清楚地说,它一开始是白色的,第一次单击时我希望它变成黄色,第二次单击时再次变为白色,第三次单击时再次变为黄色,依此类推。

我刚刚编写了第一次点击的代码,但我不知道如何完成其​​余的操作。

var myColorTransform:ColorTransform=transform.colorTransform;

half1a.addEventListener(MouseEvent.CLICK, changeColour);

function changeColour(event:MouseEvent):void
{
myColorTransform.color = 0xD5E40D;
half1a.transform.colorTransform=myColorTransform;
addChild(half_number1a);
}

最佳答案

或者,如果您不太喜欢打字:

var myColorTransform:ColorTransform=transform.colorTransform;

half1a.addEventListener(MouseEvent.CLICK, changeColour);
var cc:uint = 0; //current color.
var cl:Array = [0xFFFFFF, 0xD5E40D]; //list of all colors.

function changeColour(event:MouseEvent):void
{
myColorTransform.color = cl[cc = (++cc < cl.length)? cc : 0];
half1a.transform.colorTransform=myColorTransform;
addChild(half_number1a);
}

说明:

在我看到评论后,我意识到这可能会让经验不足的程序员感到困惑,我们想在这里互相教导,不要为别人做工作。

那么这里发生了什么?

基本设置

我们声明了一些带有颜色的数组,我们希望用它来循环我们的影片剪辑(通过?)。

var cl:Array = [0xFFFFFF, 0xD5E40D]; //list of all colors.

不,我们想知道现在显示哪种颜色,因此我们声明另一个变量来存储当前颜色的索引。

var cc:uint = 0; //current color.

如果您已经感到困惑,请参阅 Working with arrays

基本上(当前值为 0 )我们将访问数组的第一项 0xFFFFFF通过这个:

cl[cc];

目标

现在,每次单击影片剪辑时,我们所需要做的就是移动索引,使其指向数组中的下一个项目(颜色)。我们可以像这样简单地增加当前颜色的值

myColorTransform.color = cl[++cc];

请注意 x++ 之间的区别和++x 。 Adobe 有很棒的 example这有何不同。

它会起作用,但只有到我们到达数组末尾为止(显然我们不想再增加索引,我们希望它返回到 0 )剩下的就是这样做 - 将索引设置为 0 ;

如果你不知道这有什么奇怪的()?:;语法意思。您可能想检查这个 this出来 - 只是 if...else缩写,但您最好将其视为返回某些值的函数。

所以在特殊情况下cc = (++cc < cl.length)? cc : 0

相当于写这样的东西:

cc = nextIndex();

function nextIndex() {
if (++cc < cl.length) return cc;
else return 0; //else is redundant here - if "if" is ture then function will return "cc" and no other instruction are executed in this function.
}

摘要

总结一下myColorTransform.color = cl[cc = (++cc < cl.length)? cc : 0];线确实是。

  1. 增加颜色索引。
  2. 检查新索引是否小于颜色列表的长度。

    • 如果为 true,则设置 cccc (保持原样)

    • 否则,设置cc返回0

  3. 从颜色列表中选取颜色值 cl[]内评估的指数.

  4. 设置myColorTransform.color到选取的值。
<小时/>

回答其他问题。

从我们刚刚结束的cc开始value 存储新颜色的索引,因此您可以简单地使用它来访问 cl再次无需重做这些疯狂的事情。例如,如果您只想拥有一个 mc,则可以仅使用可见属性:

function changeColour(event:MouseEvent):void
{
myColorTransform.color = cl[cc = (++cc < cl.length) ? cc : 0];
half1a.transform.colorTransform = myColorTransform;
half_number1a.visible = cl[cc] == 0xFFFFFF; //check if current color is white and set it's visible state accordingly
}

请注意,如果按钮未添加到舞台拳头,即使将可见属性设置为true,您也不会看到它。 .

更灵活的解决方案

或者另一种方法是创建并行或多维数组。在这样的简单场景中,并行阵列应该是更好的选择,因为它更容易跟踪,并且您不需要更改已有的任何内容。基本上,这个想法是创建另一个数组,其中每个值(在您的情况下,影片剪辑与同一索引处的颜色值伴随:

var cl:Array = [0xFFFFFF,      0xD5E40D]; //list of all colors. 
var ml:Array = [half_number1a, null ]; //movie clips list.

所以,如果你有这样的东西,现在你的changeColor函数看起来像这样:

function changeColour(event:MouseEvent):void
{
myColorTransform.color = cl[cc = (++cc < cl.length) ? cc : 0];
half1a.transform.colorTransform = myColorTransform;
if (ml[cc]) addChild(ml[cc]); //add child if exist.
if (ml[cc - 1]) removeChild(ml[cc - 1]); //remove previous child if exist.
}

就是这样。请记住,在调用 removeChild() 之前,您需要将影片剪辑放在舞台上。

此设置的好处是,您只需将新值推送到数组即可添加任意数量的颜色和影片剪辑:)

关于actionscript-3 - 如何切换影片剪辑的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42602413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com