<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>翼灵AS程序员之路 - 教程</title><link>http://www.dodochen.com/</link><description>ActionScript3.0 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 81206</generator><language>zh-CN</language><copyright>苏ICP备07500709号 Copyright 2008-2009 专注AS-website建设. Design by Jacky.</copyright><pubDate>Thu, 09 Sep 2010 13:52:26 +0800</pubDate><item><title>MVC</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/37.html</link><pubDate>Mon, 23 Mar 2009 14:07:19 +0800</pubDate><guid>http://www.dodochen.com/post/37.html</guid><description><![CDATA[<p>有关MVC的介绍 ，下文是转载！出于arrowyoung</p><p>MVC模式是&quot;Model-View-Controller&quot;的缩写，中文翻译为&quot;模式-视图-控制器&quot;。<br />MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View，或者同时改变两者。只要Controller改变了Models的数据或者属性，所有依赖的View都会自动更新。</p><p>MVC模式能使界面（Viwe）和数据（Model）能有效的分开，由控制器（Controller）去控制。<br />&nbsp;</p><p>我们现在以一个比较简单的电子时钟的例子来看看如何使用MVC模式来架构我们的程序.</p><p>首先我们来看一下Model,Model按照我的理解是数据,就是所有的共用数据都是存储在Model里面的,时钟里有这样的数据,小时,分钟,秒;现在我们来建立一个Model,ModelLocator.as：</p><div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid"><div><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;net.smilecn.clock.model{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;flash.events.EventDispatcher;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;flash.events.Event;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ModelLocator&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;EventDispatcher{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_hour:String;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_minutes:String;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_second:String;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;ModelLocator():</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;get&nbsp;hour():String{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_hour;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;set&nbsp;hour(value:String):</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_hour&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispatchEvent(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Event(</span><span style="color: #000000">&quot;</span><span style="color: #000000">changeHour</span><span style="color: #000000">&quot;</span><span style="color: #000000">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;get&nbsp;minutes():String{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_minutes;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;set&nbsp;minutes(value:String):</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_minutes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispatchEvent(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Event(</span><span style="color: #000000">&quot;</span><span style="color: #000000">changeMinutes</span><span style="color: #000000">&quot;</span><span style="color: #000000">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;get&nbsp;second():String{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_second;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;set&nbsp;second(value:String):</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_second&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dispatchEvent(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Event(</span><span style="color: #000000">&quot;</span><span style="color: #000000">changeSecond</span><span style="color: #000000">&quot;</span><span style="color: #000000">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}</span></div></div><p><br />这个代码应该会好懂,这里ModelLocator继承了EventDispatcher这个类,继承这个类的原因是ModelLocator需要用dispatchEvent发消息出去。再来看一下Controller.as这个类：</p><div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid"><div><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;net.smilecn.clock.control{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;flash.utils.Timer;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;flash.events.TimerEvent;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;net.smilecn.clock.model.ModelLocator;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Controller{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_model:ModelLocator;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_timer:Timer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;Controller(model:ModelLocator):</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;model;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;startTime():</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_timer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Timer(</span><span style="color: #000000">1000</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_timer.addEventListener(TimerEvent.TIMER,timerHandler);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_timer.start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;function&nbsp;timerHandler(event:TimerEvent):</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;nowDate:Date&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model.hour&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;nowDate.getHours()</span><span style="color: #000000">&gt;</span><span style="color: #000000">9</span><span style="color: #000000">?</span><span style="color: #000000">String(nowDate.getHours()):</span><span style="color: #000000">&quot;</span><span style="color: #000000">0</span><span style="color: #000000">&quot;</span><span style="color: #000000">+</span><span style="color: #000000">nowDate.getHours();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model.minutes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;nowDate.getMinutes()</span><span style="color: #000000">&gt;</span><span style="color: #000000">9</span><span style="color: #000000">?</span><span style="color: #000000">String(nowDate.getMinutes()):</span><span style="color: #000000">&quot;</span><span style="color: #000000">0</span><span style="color: #000000">&quot;</span><span style="color: #000000">+</span><span style="color: #000000">nowDate.getMinutes();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model.second&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;nowDate.getSeconds()</span><span style="color: #000000">&gt;</span><span style="color: #000000">9</span><span style="color: #000000">?</span><span style="color: #000000">String(nowDate.getSeconds()):</span><span style="color: #000000">&quot;</span><span style="color: #000000">0</span><span style="color: #000000">&quot;</span><span style="color: #000000">+</span><span style="color: #000000">nowDate.getSeconds();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div><p>&nbsp;</p><p>这个类中我们用到了Timer类，因为我们用的是时钟，所以需要一个定时器，Timer是一个很好的定时器，Timer(1000,0)，这里1000是指1000毫秒，就是1秒钟触发一次定时钟，0表示次数，这里0是无限次，如果是大于0的数就是这个数的次数。侦听TimerEvent.TIMER事件就是1秒钟去执行一次timerHandler方法，timerHandler方法的功能是得到当前的时间然后去改变_model里面的值，再看一下ModelLocator.as里面的代码，当hour,minutes,second的值改变的时候就会去发消</p><p>息出去，那么谁来侦听这些消息呢，当然是View,现在来看下View.as：</p><div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid"><div><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;net.smilecn.clock.view{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;flash.display.Sprite;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;flash.events.Event;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;flash.text.TextField;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;net.smilecn.clock.model.ModelLocator;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;net.smilecn.clock.control.Controller;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;View&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Sprite{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_model:ModelLocator;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_controller:Controller;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;time_txt:TextField;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;View(model:ModelLocator,controller:Controller):</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;model;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_controller&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;controller;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_txt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TextField();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addChild(time_txt);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model.addEventListener(</span><span style="color: #000000">&quot;</span><span style="color: #000000">changeHour</span><span style="color: #000000">&quot;</span><span style="color: #000000">,changeTimeHandler);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model.addEventListener(</span><span style="color: #000000">&quot;</span><span style="color: #000000">changeMinutes</span><span style="color: #000000">&quot;</span><span style="color: #000000">,changeTimeHandler);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model.addEventListener(</span><span style="color: #000000">&quot;</span><span style="color: #000000">changeSecond</span><span style="color: #000000">&quot;</span><span style="color: #000000">,changeTimeHandler);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_controller.startTime();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;function&nbsp;changeTimeHandler(event:Event):</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_txt.text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;_model.hour</span><span style="color: #000000">+</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">+</span><span style="color: #000000">_model.minutes</span><span style="color: #000000">+</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">+</span><span style="color: #000000">_model.second;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div><p><br />在View里面，侦听了_model的事件，所以当收到数据改变的消息后，将_model的数据显示到文本框中。</p><p>要使程序运行，我们现加一个文档类：</p><div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid"><div><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;net.smilecn.clock{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;flash.display.Sprite;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;net.smilecn.clock.model.ModelLocator;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;net.smilecn.clock.control.Controller;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;net.smilecn.clock.view.View;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Clock&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Sprite{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_model:ModelLocator;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_controller:Controller;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;var&nbsp;_view:View;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;function&nbsp;Clock():</span><span style="color: #0000ff">void</span><span style="color: #000000">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_model&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ModelLocator();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_controller&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Controller(_model);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_view&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;View(_model,_controller);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addChild(_view);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div><p>在文档类中建立了ModelLocator、Controller、View的实例，ModelLocator产生的实例被传到了Controller和View中，这样就保证了Controller和View使用是相同的ModelLocator，其实要达到这种效果不用这种方法也可以，可以用到上一节中用到的单例模式。</p><p>这里作一个总结，Controller是一个控制者，它去改变ModelLocator，ModelLocator的数据被改变后去更新View，使我们能看到数据。如果界面上有一些按钮交互，那么就应该是Controller去响应View里的按钮交互，响应后去通过一些操作后改变ModelLocator,ModelLocator数据改变后通知View去改变界面。</p><p>有人可以会说这个程序用更少的代码就可以完成，但这里只是演示程序的架构，当程序很大时，好的架构会使程序更清晰。</p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/37.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=37</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=37&amp;key=b484fe1a</trackback:ping></item><item><title>单例模式</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/36.html</link><pubDate>Mon, 23 Mar 2009 13:27:52 +0800</pubDate><guid>http://www.dodochen.com/post/36.html</guid><description><![CDATA[<p>起初在讨论如何访问文档类的时候，九月给了我一个mController的类，之后我又看了一篇博文 原来这叫单例模式。<br />C++,JAVA&nbsp;会用到一些设计模式，设计模式中最基本的一种就是单例模式。先来看下这个<font face="Courier New" color="#333333" size="2">mController 类</font></p><ol>    <li><font face="Courier New" color="#3399ff" size="2">package<font color="#333333"> </font></font></li>    <li><font face="Courier New" color="#333333" size="2">{</font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">import</font> <font color="#3399ff">flash</font>.events.<font color="#3399ff">Event</font></font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">import</font> <font color="#3399ff">flash</font>.events.<font color="#3399ff">EventDispatcher</font></font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">public</font> <font color="#3399ff">class</font> mController <font color="#3399ff">extends</font> <font color="#3399ff">EventDispatcher</font></font></li>    <li><font face="Courier New" color="#333333" size="2">{</font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#ff9900">//这个对象实例</font></font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">private</font> <font color="#3399ff">static</font> <font color="#3399ff">var</font> instance:mController </font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#ff9900">/**</font></font></li>    <li><font face="Courier New" color="#ff9900" size="2">&nbsp;&nbsp;* 返回这个类的实例，做为静态方法返回实例。这样保证这个实例是唯一</font></li>    <li><font face="Courier New" color="#ff9900" size="2">*/</font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">public</font> <font color="#3399ff">static</font> <font color="#3399ff">function</font> getInstance():mController {</font></li>    <li><font face="Courier New" color="#333333" size="2">&nbsp;&nbsp;<font color="#3399ff">if</font> (instance == <font color="#3399ff">null</font>)instance= <font color="#3399ff">new</font> mController();</font></li>    <li><font face="Courier New" color="#333333" size="2">&nbsp;&nbsp;<font color="#3399ff">return</font> instance;</font></li>    <li><font face="Courier New" color="#333333" size="2">}</font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">private</font> <font color="#3399ff">var</font> <font color="#3399ff">_root</font>:*</font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">public</font> <font color="#3399ff">function</font> mController() </font></li>    <li><font face="Courier New" color="#333333" size="2">{</font></li>    <li><font face="Courier New" color="#333333" size="2">&nbsp;&nbsp;</font></li>    <li><font face="Courier New" color="#333333" size="2">}</font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">public</font> <font color="#3399ff">function</font> <font color="#3399ff">set</font> <font color="#3399ff">root</font>(<font color="#3399ff">value</font>:*):<font color="#3399ff">void</font> </font></li>    <li><font face="Courier New" color="#333333" size="2">{ <font color="#3399ff">_root</font> = <font color="#3399ff">value</font></font></li>    <li><font face="Courier New" color="#333333" size="2">&nbsp;&nbsp;<font color="#ff9900">//这里还可以设置指定文档类后还能做些什么操作</font></font></li>    <li><font face="Courier New" color="#333333" size="2">}</font></li>    <li><font face="Courier New" color="#333333" size="2"><font color="#3399ff">public</font> <font color="#3399ff">function</font> <font color="#3399ff">get</font> <font color="#3399ff">root</font>():*{ <font color="#3399ff">return</font> <font color="#3399ff">_root</font>; }</font></li>    <li><font face="Courier New" color="#333333" size="2">}</font></li>    <li><font face="Courier New" color="#333333" size="2">}</font></li></ol><p>此类中定义的root指向了一个Main的类。<br /><span style="color: #ff0000"><span style="background-color: #ffffff">应用如下：<br />public function Main():void<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;mController.getInstance().root = this</span></span></p><p><span style="color: #ff0000"><span style="background-color: #ffffff">}</span></span></p><p><span style="color: #ff0000"><span style="background-color: #ffffff">在其他类中我需要访问到这个Main里的方法。只需要 &quot;mController.getInstance().root.方法&quot; &nbsp;即可，因为mController.getInstance()已经指向了Main。</span><span style="background-color: #ff0000"><br /></span></span>单例模式的意思是不管怎么样都只产生一个实例，在这里我们加了一个getInstance的方法，一个<font face="Courier New" color="#333333" size="2">instance</font>的静态变量，getInstance也是静态的，静态的作用在于我们可以用 类名.方法名 来访问这个方法&nbsp;<br /><span style="color: #000000">单例模式的好处在于，不管在多少个类中产生实例，都是共用一个.这样只要一处改变<font color="#ff0000">mController.getInstance().root ，</font>其他地方就可以共享这一改变后的数据。</span></p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/36.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=36</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=36&amp;key=8a49393a</trackback:ping></item><item><title>getDefinitionByName</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/35.html</link><pubDate>Mon, 23 Mar 2009 13:24:17 +0800</pubDate><guid>http://www.dodochen.com/post/35.html</guid><description><![CDATA[<p>&nbsp;for(var i=1;i&lt;=20;i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ClassReference:Class = getDefinitionByName(&quot;Mc&quot;+i) as Class;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var instance:MovieClip = new ClassReference();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addChild(instance)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><p>当你要链接库中的mc1~mc20时。。getDefinitionByName&nbsp; ^o^</p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/35.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=35</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=35&amp;key=85d04f4e</trackback:ping></item><item><title>遮罩类</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/10.html</link><pubDate>Fri, 20 Feb 2009 12:29:37 +0800</pubDate><guid>http://www.dodochen.com/post/10.html</guid><description><![CDATA[<ol>    <li>package com.sprite{</li>    <li>&nbsp;</li>    <li>&nbsp;//绘制遮罩;</li>    <li>&nbsp;</li>    <li>&nbsp;import flash.display.Sprite;</li>    <li>&nbsp;</li>    <li>&nbsp;public class Mask extends Sprite</li>    <li>&nbsp;{</li>    <li>&nbsp;&nbsp;</li>    <li>&nbsp;&nbsp;public function Mask(w:Number,h:Number){</li>    <li>&nbsp;&nbsp;&nbsp;with(this.graphics)</li>    <li>&nbsp;&nbsp;&nbsp;{</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;beginFill(0x000000);</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;drawRect(0,0,w,h);</li>    <li>&nbsp;&nbsp;&nbsp;&nbsp;endFill();</li>    <li>&nbsp;&nbsp;&nbsp;}</li>    <li>&nbsp;&nbsp;}</li>    <li>&nbsp;}</li>    <li>}</li></ol><p>应用：<br />import com.sprite.Mask;<br />var _maskMC: Mask= new Mask(w,h);<br />&nbsp;&nbsp;&nbsp;mc.mask = _maskMC;<br />&nbsp;&nbsp;&nbsp;this.addChild(_maskMC)</p><p>不要小看这样的类，管理好了 对你的项目省心不少。</p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/10.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=10</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=10&amp;key=05fb750a</trackback:ping></item><item><title>加载类2</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/9.html</link><pubDate>Thu, 19 Feb 2009 12:53:24 +0800</pubDate><guid>http://www.dodochen.com/post/9.html</guid><description><![CDATA[<hr /><p>下面是根据上节完善</p><hr /><p>package com.sprite{<br />&nbsp;import flash.display.Loader;<br />&nbsp;import flash.display.Sprite;<br />&nbsp;import flash.events.*;<br />&nbsp;import flash.net.URLRequest;<br />&nbsp;import flash.text.*;<br />&nbsp;<br />&nbsp;public class DisSwf extends Sprite{<br />&nbsp;&nbsp;private var label:TextField;<br />&nbsp;&nbsp;private var format:TextFormat;<br />&nbsp;public function DisSwf(){<br />&nbsp;label=new TextField();<br />&nbsp;format=new TextFormat();<br />&nbsp;format.font=&quot;微软雅黑&quot;<br />&nbsp;format.color=0xFFCC00;<br />&nbsp;format.size=12;<br />&nbsp;label.autoSize=TextFieldAutoSize.LEFT;<br />&nbsp;label.selectable=false;<br />&nbsp;}<br />&nbsp;public function loadSwf<strike>(</strike><a href="http://www.dodochen.com/admin/FCKeditor/editor/String">url:String</a>)<br />&nbsp;{<br />&nbsp;&nbsp;while(this.numChildren &gt; 0){<br />&nbsp;&nbsp;&nbsp;&nbsp;this.removeChildAt(0)<br />&nbsp;&nbsp;&nbsp;}//如果已经有影片存在先删除<br />&nbsp;&nbsp;if(url ==&quot;&quot;) return;//没有地址则返回<br />&nbsp;&nbsp;var loader:Loader=new Loader();<br />&nbsp;&nbsp;var _urlRequest:URLRequest=new URLRequest();<br />&nbsp;&nbsp;_urlRequest.url=url;<br />&nbsp;&nbsp;loader.load(_urlRequest);<br />&nbsp;&nbsp;loader.alpha=0;<br />&nbsp;&nbsp;this.addChild(loader)//这里只是把loader添加到DisSwf显示列表，到了舞台上不要忘了把DisSwf添加到舞台显示列表<br />&nbsp;&nbsp;if(! this.contains(label)){<br />&nbsp;&nbsp;this.addChild(label)//加载百分比的文本，判断是否存在 不存在时显示到DisSwf<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete);<br />&nbsp;&nbsp;loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,loading);<br />&nbsp;&nbsp;loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loadError);<br />&nbsp;}<br />&nbsp;private function loading(evt:Event)<br />&nbsp;{<br />&nbsp;&nbsp;label.text=&quot;影片已加载：&quot;+Math.floor(evt.target.bytesLoaded/evt.target.bytesTotal*100)+&quot;%&quot;;<br />&nbsp;&nbsp;label.setTextFormat(format);<br />&nbsp;}<br />&nbsp;private function loadComplete(evt:Event)<br />&nbsp;{<br />&nbsp;&nbsp;var loader:Loader=evt.target.loader as Loader;<br />&nbsp;&nbsp;loader.alpha=1;<br />&nbsp;&nbsp;this.removeChild(label);<br />&nbsp;}<br />&nbsp;private function loadError(evt:Event)<br />&nbsp;{<br />&nbsp;&nbsp;label.text=&quot;LOAD ERROR&quot;<br />&nbsp;}<br />&nbsp;}<br />}</p><hr /><p>&nbsp;</p><p>用法：</p><p>var disSwf:DisSwf=new DisSwf();<br />disSwf.loadSwf(&quot;***&quot;);<br />disSwf.x=disSwf.y=150;<br />&nbsp;addChild(disSwf)</p><hr /><p>&nbsp;</p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/9.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=9</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=9&amp;key=f83b63da</trackback:ping></item><item><title>加载类1</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/8.html</link><pubDate>Thu, 19 Feb 2009 09:30:13 +0800</pubDate><guid>http://www.dodochen.com/post/8.html</guid><description><![CDATA[<p>//加载封装方法<br />function loadswf(swfurl:String):Loader<br />{<br />&nbsp;var loader:Loader = new Loader();<br />&nbsp;loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,ProgressHandler);<br />&nbsp;loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadSwfComplete);<br />&nbsp;loader.load(new URLRequest(swfurl));<br />return loader;//为便于其他地方对loader的引用<br />}<br />function ProgressHandler(evt:ProgressEvent){<br />&nbsp;var loaded:Number = evt.target.bytesLoaded / evt.target.bytesTotal;<br />}</p><p>function loadSwfComplete(evt:Event){<br />&nbsp;evt.target.removeEventListener(ProgressEvent.PROGRESS,ProgressHandler);<br />&nbsp;evt.target.removeEventListener(Event.COMPLETE,loadSwfComplete);<br />}</p><p><br />/*应用：<br />var loader:Loader=loadswf(&quot;***&quot;);<br />mc.addChild(loader)*/<br />&nbsp;</p><p>下节看下我常用的swf加载类。</p><p><br /><br />&nbsp;</p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/8.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=8</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=8&amp;key=151a998f</trackback:ping></item><item><title>XML解析类</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/7.html</link><pubDate>Wed, 18 Feb 2009 17:52:32 +0800</pubDate><guid>http://www.dodochen.com/post/7.html</guid><description><![CDATA[<ul>    <li style="text-align: left">&lt;data&gt;</li>    <li style="text-align: left">&nbsp;&lt;item thumb=&quot;thumb/p1.jpg&quot; img=&quot;image/p1.jpg&quot; bigImg=&quot;big_pic/p1.jpg&quot; /&gt;</li>    <li style="text-align: left">&nbsp;&lt;item thumb=&quot;thumb/p2.jpg&quot; img=&quot;image/p2.jpg&quot; bigImg=&quot;big_pic/p2.jpg&quot; /&gt;</li>    <li style="text-align: left">&nbsp;&lt;item thumb=&quot;thumb/p3.jpg&quot; img=&quot;image/p3.jpg&quot; bigImg=&quot;big_pic/p3.jpg&quot; /&gt;</li>    <li style="text-align: left">&nbsp;&lt;item thumb=&quot;thumb/p4.jpg&quot; img=&quot;image/p4.jpg&quot; bigImg=&quot;big_pic/p4.jpg&quot; /&gt;</li>    <li style="text-align: left">&nbsp;&lt;item thumb=&quot;thumb/p5.jpg&quot; img=&quot;image/p5.jpg&quot; bigImg=&quot;big_pic/p5.jpg&quot; /&gt;</li>    <li style="text-align: left">&lt;/data&gt;</li></ul><p>以上是我们给出的XML结构，3.0中解析XML再也不像2.0那样繁琐了（不过我有和3.0一样解析的方便类）</p><p>下面是我们的XML解析类，本系列教程主要针对2.0转3.0的朋友，所以不会逐行解释</p><p>package com.net<br />{<br />&nbsp;import flash.events.*;<br />&nbsp;import flash.net.*;<br />&nbsp;import com.event.MyEvent;//这里是我们上节自定义的事件扩展类，为什么要用到他呢。因为3.0中事件机制类与类之间不能随便传参数，跟2.0不一样了。通常解析所得的数据要传递的并不是在本类中；<br />&nbsp;public class ReadXml extends EventDispatcher//这里为什么要继承EventDispatcher，能理解吗？不能的话往下看<br />&nbsp;{<br />&nbsp;&nbsp;public function ReadXml(serveURL:String):void<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;var _urlLoader=new URLLoader();<br />&nbsp;&nbsp;&nbsp;var _urlRequest=new URLRequest(serveURL);<br />&nbsp;&nbsp;&nbsp;_urlLoader.load(_urlRequest);<br />&nbsp;&nbsp;&nbsp;_urlLoader.addEventListener(Event.COMPLETE,loadComplete);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;private function loadComplete(evt:Event)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;var xml:XML=new XML(evt.target.data);<br />&nbsp;&nbsp;&nbsp;var myEvent:MyEvent = new MyEvent();//实例化MyEvent<br />&nbsp;&nbsp;&nbsp;var arr:Array = new Array();//通常解析的XML数据是需要二维数组来保存的，这里XML结构比较简单<br />&nbsp;&nbsp;&nbsp;var len:uint=xml.children().length();<br />&nbsp;&nbsp;&nbsp;for (var i:uint = 0; i&lt;len; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;var obj:Object = new Object();<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.id = i;<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.thumb = xml.item[i].@thumb;<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.img = xml.item[i].@img;<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.bigImg = xml.item[i].@bigImg;<br />&nbsp;&nbsp;&nbsp;&nbsp;arr.push(obj);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;myEvent.arr = arr;//上节的事件扩展类中的隐式设置变量方法的简用<br />&nbsp;&nbsp;&nbsp;dispatchEvent(myEvent);//发送事件，如果需要得到myEvent.arr也就是XML解析后的数据，势必要在需要的地方侦听事件；<br />&nbsp;&nbsp;&nbsp;evt.target.removeEventListener(Event.COMPLETE, loadComplete);<br />&nbsp;&nbsp;}<br />&nbsp;}<br />}</p><p>应用：以上XML解析类 如果在新建fla类应用的话。如下写：</p><p>import com.event.MyEvent;<br />import com.net.ReadXml;<br />var readXml:ReadXml = new ReadXml(&quot;data.xml&quot;);<br />readXml.addEventListener(MyEvent.over, Complete)//那一开始我们为什么要继承EventDispatcher能理解了吧，当我们实例化ReadXml&nbsp;的时候，就可以ReadXml&nbsp;.addEventListener<br />function Complete(evt:MyEvent){<br />&nbsp;&nbsp;&nbsp;trace(evt.arr)<br />&nbsp;&nbsp;&nbsp;evt.target.removeEventListener(MyEvent.over, Complete);<br />&nbsp;&nbsp;&nbsp;<br />}</p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/7.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=7</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=7&amp;key=b5841e3d</trackback:ping></item><item><title>我常用到的事件扩展类</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/6.html</link><pubDate>Wed, 18 Feb 2009 17:48:30 +0800</pubDate><guid>http://www.dodochen.com/post/6.html</guid><description><![CDATA[<p>package com.event{<br />&nbsp;<br />&nbsp;import flash.events.Event;<br />&nbsp;<br />&nbsp;public class MyEvent extends Event{<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;public&nbsp; static var over:String = &quot;Complete&quot;;<br />&nbsp;&nbsp;private var _arr:Array;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;public function MyEvent(){<br />&nbsp;&nbsp;&nbsp;super(over)<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;public function set arr(p_arr:Array){<br />&nbsp;&nbsp;&nbsp;_arr = p_arr;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;public function get arr():Array{<br />&nbsp;&nbsp;&nbsp;return _arr;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;}<br />}</p><p>代码都很简单 不作解释。其实在小项目开发中就会注意到，代码设计规范 很少会用到这个扩展类，要不Adobe也不会让我们这样&ldquo;多此一举&rdquo;拉。下一节我们讲下这个扩展类的应用；</p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/6.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=6</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=6&amp;key=57321a22</trackback:ping></item><item><title>右键菜单代码类</title><author>sstpc@163.com (jacky)</author><link>http://www.dodochen.com/post/5.html</link><pubDate>Wed, 18 Feb 2009 17:36:59 +0800</pubDate><guid>http://www.dodochen.com/post/5.html</guid><description><![CDATA[<p>package com.sprite<br />{<br />&nbsp;import flash.display.*;<br />&nbsp;import flash.events.Event;<br />&nbsp;import flash.events.ContextMenuEvent;<br />&nbsp;import flash.net.*;<br />&nbsp;import flash.ui.*;<br />&nbsp;public class StageInit<br />&nbsp;{<br />&nbsp;&nbsp;public function StageInit(obj:Object):void<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;obj.stage.scaleMode=StageScaleMode.NO_SCALE;<br />&nbsp;&nbsp;&nbsp;obj.stage.align=StageAlign.TOP_LEFT;<br />&nbsp;&nbsp;&nbsp;var menuItem1:ContextMenuItem = new ContextMenuItem(&quot;Create By Jacky(翼灵)&quot;);<br />&nbsp;&nbsp;&nbsp;var menuItem2:ContextMenuItem = new ContextMenuItem(&quot;Contact me!&quot;);<br />&nbsp;&nbsp;&nbsp;menuItem1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,reg);<br />&nbsp;&nbsp;&nbsp;menuItem2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,F);<br />&nbsp;&nbsp;&nbsp;var myMenu:ContextMenu = new ContextMenu();<br />&nbsp;&nbsp;&nbsp;myMenu.hideBuiltInItems();<br />&nbsp;&nbsp;&nbsp;myMenu.customItems.push(menuItem1);<br />&nbsp;&nbsp;&nbsp;myMenu.customItems.push(menuItem2);<br />&nbsp;&nbsp;&nbsp;obj.contextMenu = myMenu;<br />&nbsp;&nbsp;&nbsp;function reg(e:ContextMenuEvent)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;var tagetURL:URLRequest = new URLRequest(&quot;<a href="http://www.dodochen.com">http://www.dodochen.com</a>&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;navigateToURL(tagetURL);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;function F(e:ContextMenuEvent)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;var tagetURL:URLRequest = new URLRequest(&quot;tencent://message/?uin=416545903&amp;Site=magic0&amp;Menu=yes/&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;navigateToURL(tagetURL);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;}<br />}</p><p>这段代码的功能实现是，1初始化舞台。不能缩放，左上对齐，然后添加版权信息的右键菜单。包括连接作者个站及与其QQ对话；</p><p>应用方法 新建3.0fla后在帧上写：<br />import com.sprite.StageInit;<br />var staIn:StageInit=new StageInit(this);</p><p>尝试下看看吧 enjoy it!</p>]]></description><category>教程</category><comments>http://www.dodochen.com/post/5.html#comment</comments><wfw:comment>http://www.dodochen.com/</wfw:comment><wfw:commentRss>http://www.dodochen.com/feed.asp?cmt=5</wfw:commentRss><trackback:ping>http://www.dodochen.com/cmd.asp?act=tb&amp;id=5&amp;key=ad884c3d</trackback:ping></item></channel></rss>
