如何从类中访问根时间轴中的变量?根时间轴中有一个名为 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
答案 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);
你最好改变整个剧本!
Adobe应该删除在时间轴上编写脚本的可能性,因为导出设置设置为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)
此外,我想提一下你应该使用时间轴编码或使用文档类,而不是后者,因为这个选项是AS3的优势,并且会使你的代码更加结构化。