使用TweenMax为onRolout onRollout设置动画

时间:2009-03-25 07:33:41

标签: flash actionscript actionscript-2 rollover

当我滚动链接时,我正在使用TweenMax为某些箭头设置动画,并在我推出时动画回动。但它不起作用,它会在翻转时动画,但不会推出。

function boxLink(mc_function:MovieClip, mc_target:MovieClip) {
mc_function.onRollOver = function() {
    var myTween:TweenMax = new TweenMax(mc_target,0.5,{_x:"2", _alpha:50, ease:Back.easeOut});
};
mc_function.onRollOut = function() {
    myTween.reverse();
};
}

boxLink(link_a1,arrow_a1);

我做错了什么?

有没有更好的方法来编写此代码?

3 个答案:

答案 0 :(得分:2)

作用域。当触发onRollOut时,myTween变量不存在,因为它在onRollOver中声明,因此仅存在于onRollOver范围内。在mc_function的范围内创建myTween变量,使其在onRollOver和onRollOut中都可用。

function boxLink(mc_function:MovieClip, mc_target:MovieClip) {
mc_function.onRollOver = function() {
        this.myTween = new TweenMax(mc_target,0.5,{_x:"2", _alpha:50, ease:Back.easeOut});
};
mc_function.onRollOut = function() {
        this.myTween.reverse();
};
}

答案 1 :(得分:2)

Luke绝对正确,你使用“var”关键字创建了一个“LOCAL VARIABLE”,它的范围是它在里面创建的函数的范围;一旦该功能运行,它就不再可用。我与Luke的不同之处在于我会在顶部创建你的变量(编译器无论如何都将变量移到顶部),你在类范围内创建它,如果你正在开发OOP,否则将它贴在动作框架的顶部附近,任何功能之外。你不必在那里给它一个值,只需声明它并对其进行数据类型化。

var myTween:TweenMax; //Can be access from anywhere within "this" scope.
mc_function.onRollOver = function()
{
    myTween = new TweenMax(mc_target,0.5,{_x:"2", _alpha:50,  ease:Back.easeOut});
};
mc_function.onRollOut = function()
{
    myTween.reverse();
};

答案 2 :(得分:1)

您确定在onRollOut执行时变量myTween仍然存在吗?因为在函数中用var定义的变量理论上应该只存在于定义它的函数内部。所以我猜你正在调用一个不再存在的变量。

尝试在trace(myTween);之前加入myTween.reverse();。如果它打印undefined,那么这就是您的问题,您应该将myTween.reverse();替换为对位转换,但写成var myTween:TweenMax = new TweenMax(*);