Flash中oop的设计模式
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-13
是_y,_height属性,我用一个参数将二者区分,由一个if语句控制,让滚动条可以自由区别状态。 另外一个解决方案是定义ScrollBar的不同子类,这两者本质区别不大,在状态比较多时,可能要维持一个庞大的if算法,这样就用生成子类的方法比较好。 ScrollBar.as //滚动条组件 function BindTo(mc,type:String,intMcHeight:Number,yinitial:Number){ ScrollType=type; if(type=="TXT"){ scrollTxt=mc; } if(type=="MC"){ initialY=yinitial; McHeight=intMcHeight; scrollMc=mc; } } function Scroll() { if(ScrollType=="TXT") this.onEnterFrame = function() { scrollTxt.scroll = scrollTxt.maxscroll*mcBlock._y/(BgLength-BlockLength*3/2) }; if(ScrollType=="MC"){ this.onEnterFrame=function(){ if(scrollMc._height>McHeight){ scrollMc._y=initialY-(scrollMc._height-McHeight)*mcBlock._y/(BgLength-BlockLength*3/2)} } } } 备注:这也是常见模式,在flash的逻辑控制里尤其随处可见 17.装饰模式(Decorator) 在食堂吃饭,没筷子怎么行?我是从来不带饭盆的。师傅很人性化,每个窗口都放着一大把筷子,随用随拿。 这个模式如果用好,有的地方可以很省力。比如,我网站里的滚动条: ScrollBar.as //滚动条组件 class ScrollBar extends BaseMovie { var BgLength:Number; var BlockLength:Number; var mcBlock:MovieClip var Width:Number; var ScrollType; var scrollTxt:TextField; var scrollMc:MovieClip; var McHeight:Number var initialY:Number function ScrollBar() { } function InitialScrollBar(BgLength, BlockLength) { this.BlockLength = BlockLength; this.BgLength = BgLength; } function BindTo(mc,type:String,intMcHeight:Number,yinitial:Number){ ScrollType=type; if(type=="TXT"){ scrollTxt=mc; } if(type=="MC"){ initialY=yinitial; McHeight=intMcHeight; scrollMc=mc; } } function Scroll() { if(ScrollType=="TXT") this.onEnterFrame = function() { scrollTxt.scroll = scrollTxt.maxscroll*mcBlock._y/(BgLength-BlockLength*3/2) }; if(ScrollType=="MC"){ this.onEnterFrame=function(){ if(scrollMc._height>McHeight){ scrollMc._y=initialY-(scrollMc._height-McHeight)*mcBlock._y/(BgLength-BlockLength*3/2)} } } } function ScrollMc() { } function StopScroll() { this.onEnterFrame=null; } function Reset(){ mcBlock._y=0; } } 核心函数是BindTo(),把这个滚动条的实例绑定到某个动态文本框或者某个mc上,就可以实现滚动。 备注:装饰模式的思想是,在不影响其他对象的情况下,以动态,透明的方式给单个对象添加职责。 18.组合模式(composite) 我中午吃六两饭,猪肉炖粉条,辣子鸡,鱼丸,咸鸭蛋,外加两杯酸奶(猪!) 这些东西都是对象,他们共同组成了我的午饭。 举例:应该说在Flash里组合模式是无处不在的,因为只要还有mc的嵌套,就有组合模式存在。几个mc装在一个mc里,这个装载用的mc称作容器。 但是就这么说,恐怕没人会重视这个模式,因为不管理不理解他我们都在用。他的确有很多种实现方式,我的方式之一是这样的。 //blog.as 我的Blog class Blog extends BaseMovie { //blog第一界面,包括日记列表,日历,最近留言 var mcBlogList: mcBlogList; //blog第二界面,包括日记全文,回复,对该日记的留言。 var mcBlogDairy:MovieClip; var currentState:String; var currentDairyID:Number; function blog(){ } } mcBlogList.as //blog第一界面 class mcBlogList extends BaseMovie { //最近留言 var recentMsgs:blogMsgsSC; //日记列表 var b |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: swish max 做火焰效果下一篇: [原创]谈谈关于FLASH发布
关于Flash中oop的设计模式的所有评论