如何引用对象,向其添加补间并将其放入AS3中的Eventlistener中?

时间:2009-03-27 15:18:47

标签: actionscript-3 animation reference event-listener

我在尝试获取我在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()

我认为这很奇怪,因为它没有说明哪个术语(并且有很多),谷歌搜索也没有找到我的解释。

3 个答案:

答案 0 :(得分:0)

我没有机会测试你的代码,因为很难为它设置一个上下文,但我的想法是:

  1. 您应该声明参数类型:function setAnimation(anObject:Object,id:uint):void。这至少是一种很好的做法。
  2. 如果您的变量var theObject = this[anObject];是对象,则完全没有
  3. anObject。我认为var theObject = this[anObject];不起作用,theObject最终为空,这就是您收到错误的原因。如果你声明了一个名为venster0的变量,那就是扩展Object的类的实例,那么你可以将引用传递给它而不会有任何其他麻烦。
  4. 根据您使用的对象,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等。它们更容易使用,并且您不必担心在补间完成之前维护引用。