Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何访问对象';s的父母';s属性,从他的事件函数?_Actionscript 3_Flash_Object_Parent - Fatal编程技术网

Actionscript 3 如何访问对象';s的父母';s属性,从他的事件函数?

Actionscript 3 如何访问对象';s的父母';s属性,从他的事件函数?,actionscript-3,flash,object,parent,Actionscript 3,Flash,Object,Parent,我已经动态创建了声音对象 var files:Object={}; files["file1"]={}; files["file1"]["snd"]=new Sound(); ...... //url etc files["file1"]["id"]='01'; //that's important files["file1"]["snd"].addEventListener(Event.COMPLETE, onSoundLoaded); function onSoundLoaded(

我已经动态创建了
声音
对象

var     files:Object={};
files["file1"]={};
files["file1"]["snd"]=new Sound();
...... //url etc
files["file1"]["id"]='01'; //that's important
files["file1"]["snd"].addEventListener(Event.COMPLETE, onSoundLoaded);

function onSoundLoaded(event:Event):void 
//// somehow I need to get the `id` property of its parent
}
我试过了

var localRef:Object = event.target as Object;
var localRef:Object = event.target.parent as Object;
但这会带来错误。
因此,我需要从
onSoundLoaded()
函数中获取
文件[“file1”][“id”]
。有可能吗?

严格地回答您的问题,您的“snd”对象和“file1”对象之间没有层次关系。父关键字用于显示对象层次结构

您必须迭代文件对象以找到匹配项:

//in the sound loaded function
for(var f:Object in files){
    if(f["snd"] === event.currentTarget){
        var myId:String = f["id"];
        //do something with the id

        break; //don't keep looping
    }
}

要稍微超出您的问题范围,使用包含与该声音相关的所有属性的自定义类/模型确实会更简洁、更容易。例如:(swf/fla旁边名为
MySound.as
的文件包含以下内容:

package {
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;

    public class MySound extends Sound {
        public var id:String;

        public function MySound(id_:String, stream:URLRequest, context:SoundLoaderContext):void {
            id = id_;
            //call the original constructor method for Sound
            super(stream, context);
        }
    }
}
现在,您可以执行以下操作:

//use a vector/array instead of an object
var sounds:Vector.<MySound> = new Vector.<MySound>();

var sound:MySound = new MySound("01");
sound.addEventListener(Event.COMPLETE, onSoundLoaded);

//add to sound array
sounds.push(sound);

function onSoundLoaded(e:Event):void {
    var sound:MySound = MySound(e.currentTarget);

    trace("My ID: ", sound.id);
}
//使用向量/数组而不是对象
变量声音:矢量。=新矢量。();
var声音:MySound=新MySound(“01”);
sound.addEventListener(Event.COMPLETE,onSoundLoaded);
//添加到声音阵列
声音。推动(声音);
onSoundLoaded函数(e:事件):void{
var声音:MySound=MySound(例如currentTarget);
跟踪(“我的ID:,sound.ID”);
}

根据您正在做的事情,您可以监听并响应MySound类中的完整事件(已加载),进一步将其抽象出来。

严格地回答您的问题,您的“snd”对象和“file1”对象之间没有层次关系。父关键字用于显示对象层次结构

您必须迭代文件对象以找到匹配项:

//in the sound loaded function
for(var f:Object in files){
    if(f["snd"] === event.currentTarget){
        var myId:String = f["id"];
        //do something with the id

        break; //don't keep looping
    }
}

要稍微超出您的问题范围,使用包含与该声音相关的所有属性的自定义类/模型确实会更简洁、更容易。例如:(swf/fla旁边名为
MySound.as
的文件包含以下内容:

package {
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.net.URLRequest;

    public class MySound extends Sound {
        public var id:String;

        public function MySound(id_:String, stream:URLRequest, context:SoundLoaderContext):void {
            id = id_;
            //call the original constructor method for Sound
            super(stream, context);
        }
    }
}
现在,您可以执行以下操作:

//use a vector/array instead of an object
var sounds:Vector.<MySound> = new Vector.<MySound>();

var sound:MySound = new MySound("01");
sound.addEventListener(Event.COMPLETE, onSoundLoaded);

//add to sound array
sounds.push(sound);

function onSoundLoaded(e:Event):void {
    var sound:MySound = MySound(e.currentTarget);

    trace("My ID: ", sound.id);
}
//使用向量/数组而不是对象
变量声音:矢量。=新矢量。();
var声音:MySound=新MySound(“01”);
sound.addEventListener(Event.COMPLETE,onSoundLoaded);
//添加到声音阵列
声音。推动(声音);
onSoundLoaded函数(e:事件):void{
var声音:MySound=MySound(例如currentTarget);
跟踪(“我的ID:,sound.ID”);
}

根据您正在做的事情,您可以监听并响应MySound类中的完整事件(已加载),进一步将其抽象出来。

这正是我到目前为止努力实现的目标。)还有另一个选项可以创建扩展
声音的类。我试图制作这个包,但没有成功。是的,那会更干净。我尝试了
文件[“file1”][“snd”]=new MySound()但它甚至不会引发完成事件。所以,让它像plan
A
那样循环,因为为vector重写代码太多了。无论如何,谢谢。如果你愿意的话,我可以开始奖励100分,然后选择你的答案来帮助我。你稍后会使用加载方法是吗?要使整个事件发生,您需要实际加载一个声音文件<代码>新声音()
实际上不会加载任何内容。我不需要赏金,当你没有得到你需要的答案时,请保留你的代表。这正是我目前所能做到的。)还有另一个选项可以创建扩展
声音的类。我试图制作这个包,但没有成功。是的,那会更干净。我尝试了
文件[“file1”][“snd”]=new MySound()但它甚至不会引发完成事件。所以,让它像plan
A
那样循环,因为为vector重写代码太多了。无论如何,谢谢。如果你愿意的话,我可以开始奖励100分,然后选择你的答案来帮助我。你稍后会使用加载方法是吗?要使整个事件发生,您需要实际加载一个声音文件<代码>新声音()
实际上不会加载任何内容。我不需要赏金,把你的代表留着,等你没有得到你需要的答案时再说。