我在尝试获取我在AS2中写给AS3的应用时遇到了一些麻烦。我需要去AS3的原因是狡猾的,所以我不会详细介绍它。
我有90%的应用程序使用新代码运行。 现在我已经到了必须从AS2转换此代码的地步,
function setAnimation(theObject,id)
{
theObject.vensterid=id;
theObject.onEnterFrame = function()
{
var myHoriTween:Tween = new Tween (this,"_x",Strong.easeOut,this._x,(130+((theObject.vensterid-frameno)*260)),1,true);
}
}
setAnimation(venster0,0);
,到AS3。我这样做的尝试最终就像
function setAnimation(anObject,id) {
var theObject = this[anObject];
theObject.vensterid=id;
function slideHorizontal(event:Event)
{
var myTween:Tween = new Tween (theObject,"x",Strong.easeOut,this.x,(130+((theObject.vensterid-frameno)*260)),1,true);
}
theObject.addEventListener(Event.ENTER_FRAME,slideHorizontal);
}
setAnimation(venster0,0);
并给我以下非错误(它不显示为编译器错误,而是显示为输出):
TypeError: Error #1010: A term is undefined and has no properties.
at sliding_windows_as3_fla::SlideMenu_1/setAnimation()
at sliding_windows_as3_fla::SlideMenu_1/frame1()
我认为这很奇怪,因为它没有说明哪个术语(并且有很多),谷歌搜索也没有找到我的解释。
答案 0 :(得分:0)
我没有机会测试你的代码,因为很难为它设置一个上下文,但我的想法是:
function setAnimation(anObject:Object,id:uint):void
。这至少是一种很好的做法。var theObject = this[anObject];
是对象,则完全没有anObject
。我认为var theObject = this[anObject];
不起作用,theObject
最终为空,这就是您收到错误的原因。如果你声明了一个名为venster0的变量,那就是扩展Object的类的实例,那么你可以将引用传递给它而不会有任何其他麻烦。theObject.vensterid=id;
可能无效。对象实例必须具有'vensterid'属性的类,否则您将获得`1119:通过具有静态类型的引用访问可能未定义的属性vensterid ... 答案 1 :(得分:0)
我认为你的问题在于字符串:
var theObject = this[anObject];
只需用
替换它var theObject = anObject;
我希望这就是你所需要的。
或者代替
setAnimation(venster0,0);
您可以传递实例名称(即字符串):
setAnimation("venster0",0);
这样可行,因为this['propertyname']
实际上是按名称访问了Object的属性。
答案 2 :(得分:0)
在Flash / Flex中使用内置的Tween类会让人感到痛苦。请考虑使用补间库:Tweener,TweenLite等。它们更容易使用,并且您不必担心在补间完成之前维护引用。