我有一个用flash制作的程序运行良好,.fla文件上的操作是空的,它有一个完成所有工作的类:
这是班级的内容:
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中的操作选项卡编写相同的程序?谢谢!
答案 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');