AS3 - 从类中的根中访问变量

时间:2012-05-08 17:41:41

标签: actionscript-3 class

如何从类中访问根时间轴中的变量?根时间轴中有一个名为 myblocks 的变量,我需要从中读取值。

这是相关的课程部分:

package myclasses
{

public final class Bcoder extends EventDispatcher
    {

private function getBlocks():void
        {

            for (var i:int = _getNumBlocks; i--; ){
            // how to get the myblocks value from here?

            }}

这是从根时间轴开始的:( ActionScript位于关键帧中)

    import myclasses.Bcoder;
var myblocks:Number=20

2 个答案:

答案 0 :(得分:1)

这完全是胡说八道,真的很糟糕。你应该避免这种编码方式!!!

这真的不是OOP,让我想到不好的AS1 / 2和3结合!!!

但是,如果您没有在“文档”属性中将类定义为主类,则可以使用此方法。

ex: 在一个foler“com”中,类ObjectOnStage.as:

package com {
    import flash.display.Stage;
    import flash.display.Sprite;
    import flash.events.Event;
    public class ObjectOnStage extends Sprite{

    public function ObjectOnStage() {
                this.addEventListener(Event.ADDED_TO_STAGE,onAddedToStage,false,0,false);
                this.addEventListener(Event.ACTIVATED,onActivate,false,0,false);
    }
    public function onAddedToStage(e:Event):void{
                    // will output null for both
            trace("\n       added " + e.target + "\n");
            trace(e.target.parent["nonSense"]);
            trace(e.target.parent["nonsense"]);
        }
    public function onActivate(e:Event):void{
                    // will output the values.
            trace("\n       added " + e.target + "\n");
            trace(e.target.parent["nonSense"]);
            trace(e.target.parent["nonsense"]);
        }
    }

}

在时间轴的第1帧:

import com.ObjectOnStage;
var nonSense:int = 1;
var nonsense:String = "This is a nonsense";
var oos:ObjectOnStage = new ObjectOnStage();
this.addChild(oos);

你最好改变整个剧本!

Adob​​e应该删除在时间轴上编写脚本的可能性,因为导出设置设置为AS3,严格模式应始终设置为严格模式ON。 我们也欢迎私人建筑商使用

MyClass.getInstance();

这将使得像:

package com {
public class MyMainObject {
    private static var instanceOfMainObject;
    private function MyMainObject(args:Vector.<String>){
                    // or MyMainObject(...args)
        trace("new Instance of MyMainObject created with " + args.toString());
    }
    public static function main(args:Vector.<String>):void{
        instanceOfMainObject = MyMainObject.getInstance(args);
        trace("arguments.length = " + args.length);
        for(var i:int = 0 ; i < args.length ; i++){
            trace( i + " = " + args[i]);
        }
    }
    public static function getInstance(args:Vector.<String>):MyMainObject{
        var instance:MyMainObject = new MyMainObject(args);
        return instance;
        }
    }
}

现在,此代码抛出错误:

1153: A constructor can only be declared public.

也许在AS4中就是这种情况

如果我通过您的评论理解它,您必须将您的变量声明的DisplayObjectContainer传递给类作为参数。

示例:     在MyClass.as

    package com {
    import flash.display.DisplayObjectContainer;
    import flash.events.EventDispatcher;
    public class MyClass extends EventDispatcher{
        public function MyClass(doc:DisplayObjectContainer) {
            trace(doc["nonSense"]);
            trace(doc["nonsense"]);
            // but this is again not OOP even if you use the "class" KEYWORD.
        }
    }
}

在时间轴上:     var nonSense:int = 1;     var nonsense:String =“这是一个废话”;     var mclss:MyClass = new MyClass(this);

关于EventDispatcher,您还可以阅读my answer about EventDispatcher here

答案 1 :(得分:0)

我想你可能想看看这个:http://www.kirupa.com/forum/showthread.php?349086-AS3-Question-Accessing-a-main-timeline-variable-from-a-class

此外,我想提一下你应该使用时间轴编码或使用文档类,而不是后者,因为这个选项是AS3的优势,并且会使你的代码更加结构化。

相关问题