从辅助.as访问.fla的元素

时间:2015-07-14 07:29:38

标签: actionscript-3 flash

我想从其他.as访问.fla的元素(如按钮,文本字段等),而不是主类。

编辑:我将分享代码以获取更多信息。

我有一个gallery.fla文档类是gallery.as。代码并不重要,在那里我读了一个XML并且依赖于某个标签的值我希望另一个类修改gallery.fla上的按钮的标签

gallery.as

 <?php
    //Start session
    session_start();
    //Check whether the session variable SESS_MEMBER_ID is present or not
    if (!isset($_SESSION['id']) || ($_SESSION['id'] =='')) {
        header("location: /index.php");
        exit();
    }
    $session_id=$_SESSION['id'];
    $user_query = $conn->query("select * from members where member_id = '$session_id'");
    $user_row = $user_query->fetch();
    $name = $user_row['firstname']." ".$user_row['middlename']." ".$user_row['lastname'];
    ?>

otherClass.as

package{
import otherClass; 
public class gallery() extends MovieClip{
    private var otherGallery:otherClass = new otherClass();
    public function gallery(){
          if(x="xmlValue"){
             otherGallery.changeLabel();
          }     
     }
 }  
}

btn在.fla上打开一个按钮,我无法从otherClass.as访问.fla的任何元素。错误1120:访问未定义的属性btnOpen。​​

1 个答案:

答案 0 :(得分:0)

这是一个范围问题。 AS3中的所有对象都是类,而编程变量和实例仅在其范围内可用。

您可以通过几种方式从其中一个孩子那里获得对主时间轴范围的引用。

<强> 1。简单的草率

您可以使用root关键字获取对主时间轴/文档类的引用。

MovieClip(root).btnOpen.label = "labelChanged";

根变量可用 AFTER 该类已添加到显示中。

<强> 2。将对主时间轴/文档类的引用传递给其他类

因此,在您的Main.as(或主时间轴或文档类)中,您可以执行以下操作:

myGalleryInstance.main = this; 

然后你的gallery课程将如下所示:

//those parenthesis don't belong in the class declaration --> () <--, I've taken them out
public class gallery extends MovieClip {
    private var otherGallery:otherClass; //better to instantiate complex objects in the constructor
    public var main:MovieClip; //create a public var you can populate

    public function gallery(){
          otherGallery = new otherClass();
          if(x="xmlValue"){
             otherGallery.changeLabel();
          }     
    }

    public function changeLabel():void{
        main.btnOpen.label = "labelChanged";
    }
} 

第3。使用父关键字 - Sloppy way#2

如果gallery类和otherCLass是显示对象,则可以使用parent关键字获取主类/主时间轴。因此,假设gallery是主时间轴的子项,而otherClass是gallery的子项,则来自gallery.as,您可以这样做:

//the main timeline is the grandparent of 'this' (otherClass)
MovieClip(MovieClip(parent).parent).btnOpen.label = "labelChanged";

root类似,parent仅在将对象添加到显示后才可用。