تقصير رمز الوظيفة وتحويل المتغير
-
05-09-2019 - |
سؤال
لدي هذا الرمز 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 والعودة عن طريق الأنواع المناسبة. هل هذا يساعد؟ (ملاحظة: هذا هو رمز غير مختبر، ولكن يجب أن تبدأ!)