如何将脚本从“.as”文件复制到flash的主时间轴?

时间:2011-04-07 03:35:33

标签: flash actionscript-3

我有一个用flash制作的程序运行良好,.fla文件上的操作是空的,它有一个完成所有工作的类:

enter image description here

这是班级的内容:

package {

    import flash.events.Event;
    import org.papervision3d.objects.parsers.DAE;

    [SWF(width=640, height=480, backgroundColor=0xCCCCCC, frameRate=30)]

    public class Earth extends PV3DARApp {

        private var _earth:DAE;

        public function Earth() {
            addEventListener(Event.INIT, _onInit);
            init('Data/camera_para.dat', 'Data/flarlogo.pat');
        }

        private function _onInit(e:Event):void {
            _earth = new DAE();
            _earth.load('model/minecraft.DAE');
            //_earth.addEventListener(Event.OPEN,imageLoaded);
            _earth.scale = 1.5;
            _earth.rotationX = 90;
            _markerNode.addChild(_earth);

            //addEventListener(Event.ENTER_FRAME, _update);
        }

        private function imageLoaded(e:Event):void { trace("HOLA"); }

        private function _update(e:Event):void {
            _earth.rotationZ -= 1
        }
    }
}

我想将所有脚本从类传递到主时间轴上的操作,我的意思是,我不想使用该类,但我不知道如何做到这一点,消除所有的“私有”字符串功能和消除一些其他逻辑思考像“包{”和其他是不够的。

那么请问,如何仅使用flash中的操作选项卡编写相同的程序?谢谢!

2 个答案:

答案 0 :(得分:2)

我不认为这是个好主意。我(以及大多数其他AS3开发人员)认为应该销毁所有时间轴代码,但它应该是这样的:

import flash.events.Event;
import org.papervision3d.objects.parsers.DAE;

var _earth:DAE;

function _onInit(e:Event):void {
    _earth = new DAE();
    _earth.load('model/minecraft.DAE');
    //_earth.addEventListener(Event.OPEN,imageLoaded);
    _earth.scale = 1.5;
    _earth.rotationX = 90;
    _markerNode.addChild(_earth);

    //addEventListener(Event.ENTER_FRAME, _update);
}

function imageLoaded(e:Event):void { trace("HOLA"); }

function _update(e:Event):void {
    _earth.rotationZ -= 1;
}

addEventListener(Event.INIT, _onInit);
init('Data/camera_para.dat', 'Data/flarlogo.pat');

没有理由不只使用文档类。我建议学习课程的运作方式。那里有很多很棒的资源,包括:

答案 1 :(得分:1)

我必须同意使用时间轴代码是坏主意的想法。

现在,转到你的代码,在不知道父类的作用的情况下很难确定。

我假设你正在使用FLARToolKit示例代码。我会这样做,因为@Adam Harte在他的回答中向您展示,并修改PV3DARApp类以便您稍微适应一些事情。

由于我的书中整个想法都很糟糕,我不打算以正确的方式做事,只是建议快速改变。

在PV3DARApp中,将_markerNode设为public:

//protected var _markerNode:FLARBaseNode;
public var _markerNode:FLARBaseNode;

在PV3DARApp和ARAppBase中,将方法init从protected更改为public:

public function init(cameraFile:String, codeFile:String, canvasWidth:int = 320, canvasHeight:int = 240, codeWidth:int = 80):void {

然后,它应该是这样的:

import flash.events.Event;
import org.papervision3d.objects.parsers.DAE;

var _earth:DAE;
var _holder:PV3DARApp  = new PV3DARApp;

function _onInit(e:Event):void {
    _earth = new DAE();
    _earth.load('model/minecraft.DAE');
    //_earth.addEventListener(Event.OPEN,imageLoaded);
    _earth.scale = 1.5;
    _earth.rotationX = 90;
   _holder. init('Data/camera_para.dat', 'Data/flarlogo.pat');
    //_markerNode.addChild(_earth);     
  _holder._markerNode.addChild(_earth); 
    //addEventListener(Event.ENTER_FRAME, _update);
}

function imageLoaded(e:Event):void { trace("HOLA"); }

function _update(e:Event):void {
    _earth.rotationZ -= 1;
}

addEventListener(Event.INIT, _onInit);
init('Data/camera_para.dat', 'Data/flarlogo.pat');