سؤال

لدي هذا الرمز AS2 الذي يقوم ببعض الرسوم المتحركة البسيطة عندما أقوم بتوسيق MC باستخدام TweenLite.

أشعر أنني لدي الكثير من التعليمات البرمجية.

هل هناك طريقة لتكون قادرة على تحديد وظيفة مثل هذا

boxlink (أ)؛

ولديك بقية التعليمات البرمجية، مع المسار إلى Movieclip الهدف في الوظيفة بدلا من متغير الوظيفة؟

كيف يمكنني إجراء هذا الرمز قصير قدر الإمكان؟

هل من الممكن تحويل متغير: سلسلة إلى متغير: 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);
هل كانت مفيدة؟

المحلول

استخدم المصفوفات بدلا من المتغيرات المسماة

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');
}

وتشغيل حلقة واحدة على صناديق الصفيف، أو استخدام وظيفة العضو () foreach ():

boxes.forEach(processBox);

لا تنس أن تحل محل Boxtype، somereturntype والعودة عن طريق الأنواع المناسبة. هل هذا يساعد؟ (ملاحظة: هذا هو رمز غير مختبر، ولكن يجب أن تبدأ!)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top