Как я могу ссылаться на объект, добавить анимацию к нему и поместить его в Eventlistener в AS3? - PullRequest
0 голосов
/ 27 марта 2009

У меня довольно большие проблемы, чтобы попытаться получить приложение, которое я написал в 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()

Я думаю, что это очень странно, поскольку в нем ничего не сказано о том, какой термин (и их довольно много) и поиск в Google не нашли мне объяснения.

Ответы [ 3 ]

0 голосов
/ 27 марта 2009

Я думаю, что ваша проблема здесь следующая строка:

var theObject = this[anObject];

Просто замените его на

var theObject = anObject;

Надеюсь, это то, что тебе нужно.

В качестве альтернативы вместо

setAnimation(venster0,0);

вы можете передать имя экземпляра (т.е. строку):

setAnimation("venster0",0);

Это будет работать, потому что this['propertyname'] вы фактически получаете доступ к свойству объекта по имени.

0 голосов
/ 03 августа 2011

Просто собираюсь выбросить, что использование встроенных классов Tween во Flash / Flex является проблемой. Вместо этого изучите использование библиотек Tweening: Tweener, TweenLite и т. Д. С ними гораздо проще работать, и вам не нужно беспокоиться о сохранении ссылок до тех пор, пока Tween не завершится.

0 голосов
/ 27 марта 2009

У меня не было возможности протестировать ваш код, потому что для него сложно настроить контекст, но мои мысли были бы:

  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; может не работать. Класс, для которого экземпляры объекта должны иметь свойство 'vensterid', иначе вы получите `1119: доступ к возможно неопределенному свойству vensterid через ссылку со статическим типом ...
...