-1

我想更改多层电影剪辑(示例层层次结构:Character_mc > arm_mc > Weapon_mc > Attribute_mc > Red_mc)中特定电影剪辑(名为:Red_mc)的不透明度。

但我在 Character_mc 中​​也有逐帧动画(每个都包含并使用相同的 MovieClip)。我希望该按钮更改每一帧内所有 Red_mc 的属性)。

我已经学习了一段时间的 Adob​​e Animate,但我最近才开始学习 ActionScript,因此我对这门语言非常陌生。基本上我只是想制作一个有点“简单”的角色配置文件“页面”。我尝试了一些方法,但它们有很多限制。以下是我用于单帧电影剪辑的内容


function fl_ClickToHide(event: MouseEvent): void {
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.IntelligenceW.visible = false;
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.AgilityW.visible = false;
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.StrengthW.visible = true;
}

button_7.addEventListener(MouseEvent.CLICK, fl_ClickToHide_2);

function fl_ClickToHide_2(event: MouseEvent): void {
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.StrengthW.visible = false;
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.IntelligenceW.visible = false;
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.AgilityW.visible = true;
}

button_8.addEventListener(MouseEvent.CLICK, fl_ClickToHide_3);

function fl_ClickToHide_3(event: MouseEvent): void {
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.StrengthW.visible = false;
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.AgilityW.visible = false;
    Idle_mc.Idle_hw_mc.CrystalW_mc.Attribute_mc.IntelligenceW.visible = true;
}

这适用于 btu 有很多限制,例如。当影片剪辑中有多个单帧时,它将不起作用。

我的目标是制作一个按钮,当单击该按钮时,它将搜索特定的影片剪辑,然后在其中编辑影片剪辑的属性。(即红色、绿色和蓝色)。

TD;DR:那么代码有没有办法跨帧内的多层电影剪辑搜索目标特定的电影剪辑?

谢谢希望我说的有道理。

4

1 回答 1

0

信息№1。当前帧中不存在的对象目前不存在(至少对于您的脚本而言)。

信息№2。混合脚本和框架是一件勇敢的事情。因为一旦你决定走那条路,就会有很多痛苦、苦难和苦难摆在面前。

如果我的任务是对分布在复杂层次结构中的大量部分进行编程,我想我会做以下事情。

首先,我将设计一个可从应用程序的任何位置访问的共享数据类。

package
{
    import flash.events.Event;
    import flash.events.EventDispatcher;

    public class AppData
    {
        static public const D:Object = new Object;
        static public const E:Event = new Event(Event.CHANGE);
        static public const I:EventDispatcher = new EventDispatcher;

        static public function has(key:String):Boolean
        {
            return D.hasOwnProperty(key);
        }

        static public function read(key:String):*
        {
            return D[key];
        }

        static public function write(key:String, value:*):void
        {
            if (value === null)
            {
                delete D[key];
            }
            else
            {
                D[key] = value;
            }

            I.dispatchEvent(E);
        }
    }
}

现在,如果您希望某个剪辑以某种方式运行,但实际上并不知道该剪辑在您的应用层次结构中的位置。例如,您想控制其 alpha 透明度。在此剪辑的第一帧上,您执行以下操作:

import AppData;
import flash.events.Event;

// The last argument is important, because timeline objects are
// auto-removed if their parent's timeline instructs so, thus
// you won't be able to locate them and unsubscribe, which,
// in turn, means they will hang in the memory forever.
// Still, if you subscribe them with useWeakReference
// set to true, they will be removed normally
// and unsubscribed automatically.
AppData.I.addEventListener(Event.CHANGE, onChange, false, 0, true);

// Call once in order to forcibly sync the object with the data.
onChange(null);

function onChange(e:Event):void
{
    if (AppData.has("red.alpha"))
    {
        alpha = AppData.read("red.alpha");
    }
    else
    {
        alpha = 1;
    }
}

然后,一旦你执行以下指令,每个对象,观察red.alpha设置都会改变它的alpha

import AppData;

AppData.write("red.alpha", 0.3);

上面的设置非常原始,并且可能可以通过多种方式进行改进,但这在很大程度上取决于您对在那里构建的内容的理解,而我没有。

于 2019-06-15T20:58:33.140 回答