【问题标题】:Shorten function code and convert variable缩短功能代码并转换变量
【发布时间】:2009-02-17 13:01:01
【问题描述】:

我有这个 AS2 代码,当我使用 TweenLite 翻转 mc 时,它会执行一些简单的动画。

感觉自己有很多重复的代码。

有没有办法只指定这样的函数

boxLink(a);

还有剩下的代码,目标影片剪辑的路径在函数中而不是在函数变量中?

如何使这段代码尽可能短?

是否可以将变量:String 转换为变量:MovieClip? 在这个例子中我会怎么做?

 import gs.*;
 import gs.easing.*;


function imageAlpha(mc_target:MovieClip) {
    mc_target.onRollOver = function() {
            TweenLite.to(mc_target,1,{_alpha:100, ease:Back.easeOut});
    };

    mc_target.onRollOut = function() {
            TweenLite.to(mc_target,1,{_alpha:60, ease:Back.easeOut});
    };
 }



  function boxLink(mc_function:MovieClip, mc_target:MovieClip, mc_image:MovieClip, linkURL:String) {
    mc_function.onRollOver = function() {
            TweenLite.to(mc_target,0.5,{_xscale:150, _yscale:150, ease:Back.easeOut});
            TweenLite.to(mc_image,1,{_alpha:100, ease:Back.easeOut});
    };

    mc_function.onRollOut = function() {
            TweenLite.to(mc_target,0.5,{_xscale:100, _yscale:100, ease:Back.easeOut});
            TweenLite.to(mc_image,1,{_alpha:60, ease:Back.easeOut});
    };

    mc_function.onRelease = function() {
            if (linkURL) {
            getURL(linkURL);
            }
    };
 }



 imageAlpha(a_box.image);
 imageAlpha(b_box.image);
 imageAlpha(c_box.image);
 imageAlpha(d_box.image);

 boxLink(a_box.link1,a_box.arrow1,a_box.image,'http://www.google.no');
 boxLink(a_box.link2,a_box.arrow2,a_box.image,'http://www.google.no');
 boxLink(a_box.link3,a_box.arrow3,a_box.image,'http://www.google.no');

 boxLink(b_box.link1,b_box.arrow1,b_box.image,'http://www.google.no');
 boxLink(b_box.link2,b_box.arrow2,b_box.image,'http://www.google.no');
 boxLink(b_box.link3,b_box.arrow3,b_box.image,'http://www.google.no');

 boxLink(c_box.link1,c_box.arrow1,c_box.image,'http://www.google.no');
 boxLink(c_box.link2,c_box.arrow2,c_box.image,'http://www.google.no');
 boxLink(c_box.link3,c_box.arrow3,c_box.image);

 boxLink(d_box.link1,d_box.arrow1,d_box.image,'http://www.google.no');
 boxLink(d_box.link2,d_box.arrow2,d_box.image,'http://www.google.no');
 boxLink(d_box.link3,d_box.arrow3,d_box.image);

【问题讨论】:

  • 在 vim 中只需执行 ggdGzz 即可解决您的问题

标签: flash actionscript function actionscript-2 movieclip


【解决方案1】:

使用数组代替命名变量

a_box.link_1, a_box.link_2, ..., a_box.link_3 

变成

a_box.link[ i ] where i = 0 to n-1, n = number of links

箭头也是如此。

接下来,为boxLink() 创建一个包装器

public function 
boxLinkWrapper(x:BoxType, url:string='http://www.google.no') :ReturnType {
    for (i:int = 0; i < x.link.size; ++i) {
        boxLink(x.link[ i ], x.arrow[ i ], x.image, url);
    }
}

另外,既然你有很多这样的盒子,把它们放在一个数组里:

var boxes:Array = new Array();
boxes.push(new Box("a")); //a_box
boxes.push(new Box("b")); //b_box

并总结每个盒子所需的步骤:

public function 
processBox(x:BoxType):SomeReturnType {
    imageAlpha(d_box.image);
    boxLink(a_box.link1,a_box.arrow1,a_box.image,'http://www.google.no');
}

并在数组框上运行 for 循环,或使用 forEach() 成员函数:

boxes.forEach(processBox);

不要忘记将 BoxType、SomeReturnType 和 ReturnType 替换为适当的类型。 这有帮助吗? (注意:这是未经测试的代码,但应该可以帮助您入门!)

【讨论】:

  • 谢谢,类似这样,但我有点想在函数中包含所有代码,所以我可以插入 boxLink(a);它会用 a (a_box.link1,a_box.arrow1,a_box.image) 做所有事情。 ?
  • 这就是 boxLinkWrapper() 的作用。
  • 好的,我明白了 ;) 但是我怎样才能将所有代码都放在“function boxLink”中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多