2011-06-03 144 views
1

对不起,如果这个问题已经得到解答,但我似乎无法在网上找到任何相关示例。我基本上有一个类加载一组MovieClip对象并提供访问器函数来返回它们。AS3:从函数返回MovieClip

public function getMovieClip(mc:MovieClip):Boolean 
{ 
    if(allFilesLoaded) 
    { 
     mc = fileLoader.content; 

     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

显然这不起作用,但它给出了我想要做的事情。我只想在对象已经加载的情况下将MovieClip返回给调用代码。

回答

1

您不能像这样修改参数。相反,返回了MovieClip这样的:

public function getMovieClip():MovieClip 
{ 
    if (allFilesLoaded) 
    { 
     return fileLoader.content; 
    } 
    else 
    { 
     return null; 
    } 
} 

然后你可以使用它像这样,即使读了MovieClip:

var mc:MovieClip; // defined somewhere 

// later... 
if ((mc = x.getMovieClip())) 
{ 
    // all files were loaded and mc is not null. 
} 
else 
{ 
    // files were not loaded and mc is null. 
} 
+0

我猜这不会抛出一个错误?在这种情况下,我可以将返回值分配给调用代码中的MovieClip并检查它是否为NULL? – PeddleSpam 2011-06-03 20:27:25

+0

@PeddleSpam:添加了一个如何使用它的例子。但是,是的,基本上你会检查返回值是否为空(而不是用原始函数检查它是否为真)。 – poke 2011-06-03 20:28:42

+0

这是一个非常干净的解决方案,谢谢^ _ ^这个类已经为不成功的负载调度了一个事件,但是如果由于某种原因访问器被调用,我仍然不喜欢有一个“潜在的”错误。 – PeddleSpam 2011-06-03 20:33:35

1

试试这个:

// change the allFilesLoaded value to view the other result 
var allFilesLoaded:Boolean = true; 

trace(getMovieClip(null)); 

function getMovieClip(mc:*):* 
{ 
    if(allFilesLoaded) 
    { 
     mc = new MovieClip(); 

     return mc; 
    } 
    else 
    { 
     return false; 
    } 
} 

星号表示返回的数据的类型是未知的,我们都在布尔为影片剪辑。

如果allFilesLoaded返回mc(MovieClip),否则返回false(布尔值)。

希望有所帮助。

+0

我认为可以工作,但我将不得不使用一个虚拟变量来存储返回值,然后用** typeof **来检查它?使用未定义的返回类型似乎有点混乱。这在C中会简单得多:P – PeddleSpam 2011-06-03 20:24:57

+0

当你不需要它们时,你不应该有可变的返回值。相反,只需返回null。 – poke 2011-06-03 20:25:45