0

我在尝试获取我在AS2AS3中编写的应用程序时遇到了一些麻烦。我需要去 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()

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

4

3 回答 3

0

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

  1. 您应该声明参数类型:function setAnimation(anObject:Object,id:uint):void. 这至少是一种很好的做法。
  2. var theObject = this[anObject];anObject如果您的变量是对象,则完全没有必要。我认为var theObject = this[anObject];不起作用,theObject最终为空,这就是你得到错误的原因。如果您声明了一个名为 venster0 的变量,即扩展 Object 的类的实例,那么您可以将引用传递给它而不会遇到任何其他麻烦。
  3. 根据您使用的对象,theObject.vensterid=id;可能无法正常工作。Object 实例必须具有“vensterid”属性的类,否则您将获得“1119:通过静态类型的引用访问可能未定义的属性 vensterid ...
于 2009-03-27T15:29:31.653 回答
0

我认为您的问题是以下字符串:

var theObject = this[anObject];

只需将其替换为

var theObject = anObject;

我希望这就是你所需要的。

或者代替

setAnimation(venster0,0);

你可以传递一个实例名称(即字符串):

setAnimation("venster0",0);

这将起作用,因为this['propertyname']您实际上是按名称访问 Object 的属性。

于 2009-03-27T16:11:54.797 回答
0

只是要抛弃在 Flash/Flex 中使用内置的 Tween 类是一种痛苦。考虑改用 Tweening 库:Tweener、TweenLite 等。它们更容易使用,并且您不必担心在 Tween 完成之前维护引用。

于 2011-08-03T17:03:28.807 回答