<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>金沙水拍云崖暖 - WEB程序开发</title>
		<link>http://Lixf.net/</link>
		<description>转载是种美德...</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 1.6 Build 20080806</generator>
		<lastBuildDate>Tue, 07 Sep 2010 10:14:24 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=996</guid>
			<title>新浪体育频道FLASH,AS代码</title>
			<author>Calchas</author>
			<description><![CDATA[<p>请看新浪体育频道http://sports.sina.com.cn/中左上的那个flash，能自动循环播放，同时能自由点击1、2、3、4、5按钮 选择观看。<br />
<br />
第一帧脚本：<br />
function strtoarray(str, myarray)<br />
{<br />
while (str.indexOf(&quot;|&quot;) != -1)<br />
{<br />
myarray.push(str.slice(0, str.indexOf(&quot;|&quot;)));<br />
var _l1 = str.slice(str.indexOf(&quot;|&quot;) + 1);<br />
} // end while<br />
myarray.push(_l1);<br />
return(myarray);<br />
} // End of the function<br />
function replinkad(linkarray)<br />
{<br />
var _l1;<br />
var _l3;<br />
_l1 = 0;<br />
while (_l1 &lt; linkarray.length)<br />
{<br />
while (linkarray[_l1].indexOf(&quot;^&quot;) != -1)<br />
{<br />
_l3 = linkarray[_l1].slice(0, linkarray[_l1].indexOf(&quot;^&quot;));<br />
_l3 = _l3.concat(&quot;&amp;&quot;);<br />
_l3 =  _l3.concat(linkarray[_l1].slice(linkarray[_l1].indexOf(&quot;^&quot;) + 1));<br />
linkarray[_l1] = _l3;<br />
} // end while<br />
_l1++;<br />
} // end while<br />
} // End of the function<br />
function replink_deleted(textarray)<br />
{<br />
var _l2;<br />
var _l4;<br />
_l2 = 0;<br />
while (_l2 &lt; textarray.length)<br />
{<br />
if (textarray[_l2].indexOf(&quot;<br />
{<br />
textarray[_l2] = &quot;<a target="\'_blank\'" href="http://www.flashempire.com/school/%5C%27%22">&quot; +  textarray[_l2] + &quot;</a>&quot;;<br />
} // end if<br />
_l2++;<br />
} // end while<br />
} // End of the function<br />
function preloader1(target)<br />
{<br />
mc = target.pic;<br />
var _l2 = int(mc.getBytesLoaded() / mc.getBytesTotal() * 100);<br />
if (_l2 &gt;= 100)<br />
{<br />
delete target[&quot;onEnterFrame&quot;];<br />
target._width = borderwidth;<br />
target._height = borderheight;<br />
} // end if<br />
} // End of the function<br />
stop();<br />
pic_array = new Array();<br />
link_array = new Array();<br />
text_array = new Array();<br />
strtoarray(String(pics), pic_array);<br />
strtoarray(String(links), link_array);<br />
replinkad(link_array);<br />
if (_root.textheight &gt; 0)<br />
{<br />
strtoarray(String(texts), text_array);<br />
replink(text_array);<br />
_root.text_m._x = -borderwidth / 2;<br />
_root.text_m._y = borderheight / 2 - textheight / 2;<br />
} // end if<br />
var adPos = -1;<br />
var ifSwf = false;<br />
if (pic_array.length &gt; 2)<br />
{<br />
if (pic_array[pic_array.length - 1].indexOf(&quot;http://ad&quot;) != -1)<br />
{<br />
var tempContent = pic_array[pic_array.length - 1];<br />
var i = pic_array.length - 2;<br />
while (i &gt;= 2)<br />
{<br />
pic_array[i + 1] = pic_array[i];<br />
i--;<br />
} // end while<br />
_root.pic_array[2] = tempContent;<br />
tempContent = link_array[link_array.length - 1];<br />
var i = link_array.length - 2;<br />
while (i &gt;= 2)<br />
{<br />
link_array[i + 1] = link_array[i];<br />
i--;<br />
} // end while<br />
link_array[2] = tempContent;<br />
if (_root.textheight &gt; 0)<br />
{<br />
tempContent = text_array[text_array.length - 1];<br />
var i = text_array.length - 2;<br />
while (i &gt;= 2)<br />
{<br />
text_array[i + 1] = text_array[i];<br />
i--;<br />
} // end while<br />
text_array[2] = tempContent;<br />
} // end if<br />
} // end if<br />
} // end if<br />
Stage.scaleMode = &quot;noScale&quot;;<br />
_root.loader.swapDepths(9);<br />
_root.loader._xscale = Math.ceil(_root.borderwidth * 100 / 329);<br />
_root.loader._yscale = Math.ceil(_root.borderheight * 100 / 206);<br />
_root.loader._x = -borderwidth / 2 + 1;<br />
_root.loader._y = -borderheight / 2 - textheight / 2 + 1;<br />
_root.border.swapDepths(10);<br />
_root.border._width = borderwidth - 1;<br />
_root.border._height = borderheight - 1;<br />
_root.border._x = -borderwidth / 2 + 1;<br />
_root.border._y = -borderheight / 2 - textheight / 2 + 1;<br />
_root.linkbutton1._xscale = Math.ceil(_root.borderwidth * 100 / 400);<br />
_root.linkbutton1._yscale = Math.ceil((_root.borderheight +  _root.textheight) * 100 / 300);<br />
_root.linkbutton1._x = -borderwidth / 2 + 1;<br />
_root.linkbutton1._y = -borderheight / 2 - textheight / 2 + 1;<br />
var current_pic = -1;<br />
if (pic_array.length == 1)<br />
{<br />
m = createEmptyMovieClip(&quot;image0&quot;, 0);<br />
m_load = m.createEmptyMovieClip(&quot;pic&quot;, 0);<br />
m._x = -borderwidth / 2;<br />
m._y = -borderheight / 2 - textheight / 2;<br />
m_load.loadMovie(pic_array[0]);<br />
m.onEnterFrame = function ()<br />
{<br />
preloader1(this);<br />
};<br />
current_pic = 0;<br />
}<br />
else<br />
{<br />
gotoAndPlay(&quot;multipic&quot;);<br />
} // end if<br />
<br />
<br />
第二帧脚本：<br />
function init_trans()<br />
{<br />
for (n = 0; n &lt; _root.trans_total; n++)<br />
{<br />
with (eval(&quot;_root.mask&quot; + n))<br />
{<br />
_x = -_root.borderwidth / 2;<br />
_y = -_root.borderheight / 2 - _root.textheight / 2;<br />
} // End of with<br />
} // end of for<br />
} // End of the function<br />
function preloader(target, flagSwfPre)<br />
{<br />
mc = target.pic;<br />
var _l3 = int(mc.getBytesLoaded() / mc.getBytesTotal() * 100);<br />
_root.loader.gotoAndStop(_l3);<br />
if (_l3 &gt;= 100)<br />
{<br />
delete target[&quot;onEnterFrame&quot;];<br />
setProperty(&quot;_root.buttonbanner.num&quot; + (target.getDepth() + 1),  _alpha, &quot;100&quot;);<br />
if (_level0.image0 == target)<br />
{<br />
mc._alpha = 100;<br />
_root.buttonbanner.num1.gotoAndStop(3);<br />
_root.current_pic = 0;<br />
_root.timer.gotoAndPlay(2);<br />
} // end if<br />
target._width = borderwidth;<br />
target._height = borderheight;<br />
if (flagSwfPre == 1)<br />
{<br />
mc.stop();<br />
} // end if<br />
} // end if<br />
} // End of the function<br />
function swappic(d1, d2)<br />
{<br />
with (eval(&quot;_root.image&quot; + _root.pre_pic))<br />
{<br />
swapDepths(6);<br />
} // End of with<br />
with (eval(&quot;_root.image&quot; + _root.current_pic))<br />
{<br />
swapDepths(d1);<br />
} // End of with<br />
with (eval(&quot;_root.image&quot; + _root.pre_pic))<br />
{<br />
swapDepths(d2);<br />
} // End of with<br />
} // End of the function<br />
function changepic()<br />
{<br />
if (pic_array.length &gt; 1)<br />
{<br />
for (i = 0; i &lt; pic_array.length; i++)<br />
{<br />
setProperty(&quot;_root.image&quot; + i + &quot;.pic&quot;, _alpha, &quot;0&quot;);<br />
with (eval(&quot;_root.buttonbanner.num&quot; + (i + 1)))<br />
{<br />
gotoAndStop(1);<br />
} // End of with<br />
} // end of for<br />
_root.mask_total = eval(&quot;_root.mask&quot; + _root.trans_cur +  &quot;.mask_total&quot;);<br />
if (_root.mask_total &gt; -1)<br />
{<br />
for (j = 0; j &lt;= _root.mask_total; j++)<br />
{<br />
removeMovieClip(&quot;_root.mask&quot; + _root.trans_cur +  &quot;.block&quot; + j);<br />
} // end of for<br />
} // end if<br />
with (eval(&quot;_root.image&quot; + _root.pre_pic + &quot;.pic&quot;))<br />
{<br />
setMask(null);<br />
} // End of with<br />
if (_root.ifSwf &amp;&amp; _root.pre_pic == _root.adPos)<br />
{<br />
with (eval(&quot;_root.image&quot; + _root.adPos + &quot;.pic&quot;))<br />
{<br />
gotoAndStop(1);<br />
} // End of with<br />
_root.intervaltotaltime = _root.intervaltotaltimeSave;<br />
} // end if<br />
_root.trans_cur = random(_root.trans_total);<br />
with (eval(&quot;_root.image&quot; + _root.current_pic + &quot;.pic&quot;))<br />
{<br />
setMask(&quot;mask&quot; + _root.trans_cur);<br />
} // End of with<br />
_root.masking = true;<br />
with (eval(&quot;_root.mask&quot; + _root.trans_cur))<br />
{<br />
play();<br />
} // End of with<br />
setProperty(&quot;_root.image&quot; + _root.current_pic + &quot;.pic&quot;, _alpha,  &quot;100&quot;);<br />
setProperty(&quot;_root.image&quot; + _root.pre_pic + &quot;.pic&quot;, _alpha,  &quot;100&quot;);<br />
if (_root.pre_pic &gt; _root.current_pic)<br />
{<br />
_root.ifswaped = true;<br />
_root.swappic(_root.pre_pic, _root.current_pic);<br />
} // end if<br />
with (eval(&quot;_root.buttonbanner.num&quot; + (_root.current_pic + 1)))<br />
{<br />
gotoAndStop(3);<br />
} // End of with<br />
if (_root.textheight &gt; 0)<br />
{<br />
with (_root.text_m.titletext)<br />
{<br />
htmltext = &quot;<strong>&quot; + _root.text_array[_root.current_pic] +  &quot;</strong>&quot;;<br />
} // End of with<br />
} // end if<br />
} // end if<br />
} // End of the function<br />
function gotolink()<br />
{<br />
if (_root.pre_pic == -1)<br />
{<br />
getURL(link_array[0], &quot;_blank&quot;);<br />
}<br />
else<br />
{<br />
getURL(link_array[_root.pre_pic], &quot;_blank&quot;);<br />
} // end if<br />
} // End of the function<br />
function gotolink_mask()<br />
{<br />
getURL(link_array[_root.current_pic], &quot;_blank&quot;);<br />
} // End of the function<br />
function playandswitch(pic)<br />
{<br />
if (!_root.masking)<br />
{<br />
_root.timer.gotoAndStop(1);<br />
_root.pre_pic = _root.current_pic;<br />
_root.current_pic = pic;<br />
_root.changepic();<br />
}<br />
else<br />
{<br />
_root.next_pic = pic;<br />
} // end if<br />
} // End of the function<br />
function draw_mask(mask, a, b, c, d)<br />
{<br />
mask.clear();<br />
mask.lineStyle(0, 0);<br />
mask.moveTo(a, b);<br />
mask.beginFill(0);<br />
mask.lineTo(a, d);<br />
mask.lineTo(c, d);<br />
mask.lineTo(c, b);<br />
mask.lineTo(a, b);<br />
mask.endFill();<br />
} // End of the function<br />
stop();<br />
_root.attachMovie(&quot;pointerchanger&quot;, &quot;pointer_btn&quot;, 50000);<br />
_root.pointer_btn._alpha = 0;<br />
_root.pointer_btn._x = -borderwidth / 2;<br />
_root.pointer_btn._y = borderheight / 2 - _root.textheight / 2;<br />
_root.pointer_btn._height = _root.textheight;<br />
_root.pointer_btn._width = borderwidth;<br />
var pre_pic = -1;<br />
var current_pic = -1;<br />
var next_pic = -1;<br />
var intervaltotaltime = 5;<br />
var intervaltotaltimeSave = 0;<br />
var intervalsecond = 0;<br />
var mask_total = -1;<br />
var mask_num = 0;<br />
var trans_total = 21;<br />
var trans_cur = 20;<br />
var ifswaped = false;<br />
var masking = false;<br />
_root.linkbutton._xscale = Math.ceil(_root.borderwidth * 100 / 400);<br />
_root.linkbutton._yscale = Math.ceil(_root.borderheight * 100 / 300);<br />
_root.linkbutton._x = -_root.borderwidth / 2;<br />
_root.linkbutton._y = -_root.borderheight / 2 - _root.textheight / 2;<br />
init_trans();<br />
var i = 0;<br />
b = createEmptyMovieClip(&quot;buttonbanner&quot;, 8);<br />
b_banner_back = b.attachMovie(&quot;banner_back&quot;, &quot;banner_back&quot;, 0);<br />
b_banner_back._x = _root.borderwidth / 2 - b_banner_back._width;<br />
b_banner_back._y = _root.borderheight / 2 - _root.textheight / 2 - 13;<br />
onEnterFrame = function ()<br />
{<br />
if (i &lt; _root.pic_array.length)<br />
{<br />
m = createEmptyMovieClip(&quot;image&quot; + i, i);<br />
m_load = m.createEmptyMovieClip(&quot;pic&quot;, 0);<br />
b_num = b.attachMovie(&quot;button&quot; + (i + 1), &quot;num&quot; + (i + 1), i +  2);<br />
b_num._alpha = 0;<br />
b_num._x = Math.ceil(_root.borderwidth / 2 -  (_root.pic_array.length - i) * 23 + 7);<br />
b_num._y = Math.ceil(_root.borderheight / 2 - _root.textheight /  2 - 10);<br />
m._x = -_root.borderwidth / 2;<br />
m._y = -_root.borderheight / 2 - _root.textheight / 2;<br />
m_load.loadMovie(pic_array[i]);<br />
m_load._alpha = 0;<br />
var flagSwf;<br />
if (_root.ifSwf &amp;&amp; i == _root.adPos)<br />
{<br />
flagSwf = 1;<br />
}<br />
else<br />
{<br />
flagSwf = 0;<br />
} // end if<br />
m.onEnterFrame = function ()<br />
{<br />
preloader(this, flagSwf);<br />
};<br />
}<br />
else<br />
{<br />
delete i;<br />
delete onEnterFrame;<br />
_root.loader._alpha = 0;<br />
} // end if<br />
i++;<br />
};</p>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=996</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2010-02-23 11:02</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=876</guid>
			<title>让Flash也有Onclick的方法</title>
			<author>Calchas</author>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 大家都知道图片上是可以添加链接的，也就是在图片&lt;img src=''&gt;两边添加&lt;a href=''&gt;&lt;/a&gt;，而Flash则不可以这样做的，所以只能使用其它方法了，方法之一：在Flash的Object两边添加&lt;button&gt;&lt;/botton&gt;，如下：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">button</span><span>&nbsp;</span><span class="attribute">onclick</span><span>=</span><span class="attribute-value">&quot;location.href='http://www.163.com'&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">object</span><span>&nbsp;</span><span class="attribute">classid</span><span>=</span><span class="attribute-value">&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot;</span><span>&nbsp;</span><span class="attribute">codebase</span><span>=</span><span class="attribute-value">&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0&quot;</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">&quot;493&quot;</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">&quot;138&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;movie&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;index.swf&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;quality&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;high&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;wmode&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;transparent&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="tag">&lt;</span><span class="tag-name">embed</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">&quot;images/index.swf&quot;</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">&quot;493&quot;</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">&quot;138&quot;</span><span>&nbsp;</span><span class="attribute">quality</span><span>=</span><span class="attribute-value">&quot;high&quot;</span><span>&nbsp;</span><span class="attribute">pluginspage</span><span>=</span><span class="attribute-value">&quot;http://www.macromedia.com/go/getflashplayer&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;application/x-shockwave-flash&quot;</span><span>&nbsp;</span><span class="attribute">wmode</span><span>=</span><span class="attribute-value">&quot;transparent&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">embed</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">object</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">button</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=876</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2008-04-24 15:37</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=667</guid>
			<title>页面中flash 出现“单击以激活并使用此控件”的js解决方法</title>
			<author>Calchas</author>
			<description><![CDATA[<span style="COLOR: red"><strong>调用javascript解决方法：</strong></span><br /><br /><a href="http://Lixf.net/?action=show&amp;id=667" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://Lixf.net/?action=show&amp;id=667</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2007-03-29 13:22</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=648</guid>
			<title>可控制Flash Player的Javascript方法</title>
			<author>Calchas</author>
			<description><![CDATA[<p>可控制Flash Player的Javascript方法:<br />一览表:<br />Play() ---------------------------------------- 播放动画 <br />StopPlay()------------------------------------停止动画 <br />IsPlaying()----------------------------------- 动画是否正在播放<br />GotoFrame(frame_number)---------------- 跳转到某帧 <br />TotalFrames()------------------------------- 获取动画总帧数 <br />CurrentFrame()------------------------------回传当前动画所在帧数-1 <br />Rewind()-------------------------------------使动画返回第一帧 <br />SetZoomRect(left,top,right,buttom)-------放大指定区域 <br />Zoom(percent)------------------------------改变动画大小 <br />Pan(x_position,y_position,unit)------------使动画在x,y方向上平移 <br />PercentLoaded()----------------------------返回动画被载入的百分比 <br />LoadMovie(level_number,path)----------- 加载动画 <br />TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数 <br />TGotoLabel(movie_clip,label_name)------ movie_clip跳转到指定标签 <br />TCurrentFrame(movie_clip)--------------- 回传movie_clip当前帧-1 <br />TCurrentLabel(movie_clip)-----------------回传movie_clip当前标签 <br />TPlay(movie_clip)---------------------------播放movie_clip <br />TStopPlay(movie_clip)----------------------停止movie_clip的播放 <br />GetVariable(variable_name)-----------------获取变量 <br />SetVariable(variable_name,value)-----------变量赋值 <br />TCallFrame(movie_clip,frame_number)---call指定帧上的action <br />TCallLabel(movie_clip,label)----------------call指定标签上的action <br />TGetProperty(movie_clip,property)--------获取movie_clip的指定属性 <br />TSetProperty(movie_clip,property,number)-设置movie_clip的指定属</p>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=648</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2007-02-11 15:29</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=605</guid>
			<title>从30个数字中获得不重复的10个随机数字</title>
			<author>Calchas</author>
			<description><![CDATA[<p>可以用在FLASH上面吧。</p>
<p>当需要找一些随机的数字时很好用/。用到 Math.random</p><br /><br /><a href="http://Lixf.net/?action=show&amp;id=605" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://Lixf.net/?action=show&amp;id=605</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2006-11-20 15:25</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=604</guid>
			<title>响应键盘的一般方法介绍</title>
			<author>Calchas</author>
			<description><![CDATA[响应键盘的方法也就是 主要的四种，分别是：<br />1、利用按钮进行检测<br />2、利用KEY对象<br />3、利用键盘侦听的方法<br />4、利用影片剪辑的keyUp和keyDown事件来实现响应键盘<br /><br /><a href="http://Lixf.net/?action=show&amp;id=604" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://Lixf.net/?action=show&amp;id=604</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2006-11-16 10:28</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=432</guid>
			<title>Flash OBJECT和EMBED标签</title>
			<author>Calchas</author>
			<description><![CDATA[Flash OBJECT和EMBED标签 <BR>&nbsp;&nbsp;我们现在大部分人做网页，都是直接用DW插入flash，而且DW也是所见即所得，直接生成了相应的flash显示代码。可是我们又有多少人了解这些直接由DW生成的代码呢？其实我接触flash player标签，是在刚学习html的时候，那时书中插入flash只有最简单的&lt;embed src="" width="" height=""&gt;&lt;/embed&gt;一句,而且在很长一段时间里，只要网页中插入flash我也都是这样写的，当时认为，这样写即简单好记，又节省代码，反倒对DW起疑问，为什么这么简单的代码，它要搞得这么复杂呢。但仔细想想，DW生成的代码必有他的道理。而在后来的应用中，也应证了我的判断（呵呵，也许想法本来就菜）。 <BR>&nbsp;&nbsp;这几个星期，一直在做flash与JS及.NET交互相关的应用，所以对OBJECT、EMBED标签有了更深的了解。就这两天，在做flash实现网页拖块布局功能（类似QQ空间的JS布局），由于要根据不同用户，载入及输出不同的用户配置文件，所以我想到了由.NET生成的相应用户的配置文件名，而用&lt;param name="FlashVars" value="import=userimport1.txt&amp;output=useroutput1.txt"&gt;来传递相关的文件变量给flash。但在实际应用中，发现Firefox及opera等浏览器并不能识变这样的变量传递，更确切地说，它们并不支持&lt;param&gt;标签。所以今天抽空，上MM网收集整合了一下相关的内容。 <BR><BR><STRONG>一、介绍：</STRONG> <BR>我们要在网页中正常显示flash内容，那么页面中必须要有指定flash路径的标签。也就是OBJECT和EMBED标签。OBJECT标签是用于windows平台的IE浏览器的，而EMBED是用于windows和Macintosh平台下的Netscape Navigator浏览器以及Macintosh平台下的IE浏览器。windows平台的IE利用Activex控件来播放flash而其它的浏览器则使用Netscape插件技术来播放flash。 <BR><BR><STRONG>下面是简单的网页中插入flash的代码示例：</STRONG> <BR>
<P><STRONG>Code:</STRONG><BR>
<DIV style="BORDER-RIGHT: #999 1px dotted; PADDING-RIGHT: 5px; BORDER-TOP: #999 1px dotted; PADDING-LEFT: 5px; FONT-SIZE: 90%; BACKGROUND: #dee; PADDING-BOTTOM: 5px; OVERFLOW: hidden; BORDER-LEFT: #999 1px dotted; PADDING-TOP: 5px; BORDER-BOTTOM: #999 1px dotted">&lt;OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" <BR>codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" <BR>WIDTH="550" HEIGHT="400" id="myMovieName"&gt; <BR>&lt;PARAM NAME=movie VALUE="myFlashMovie.swf"&gt; <BR>&lt;PARAM NAME=quality VALUE=high&gt; <BR>&lt;PARAM NAME=bgcolor VALUE=#FFFFFF&gt; <BR>&lt;EMBED src="/support/flash/ts/documents/myFlashMovie.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" <BR>NAME="myMovieName" ALIGN="" TYPE="application/x-shockwave-flash" <BR>PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"&gt; <BR>&lt;/EMBED&gt; <BR>&lt;/OBJECT&gt;</DIV>
<P></P>
<P><BR><STRONG>二、为什么要使用以上全部的标签？能省略某些标签不？</STRONG> <BR>&nbsp; OBJECT标签是用于windows IE3.0及以后浏览器或者其它支持Activex控件的浏览器。“classid”和“codebase”属性必须要精确地按上例所示的写法写，它们告诉浏览器自动下载flash player的地址。如果你没有安装过flash player 那么IE3.0以后的浏览器会跳出一个提示框访问是否要自动安装flash player。当然，如果你不想让那些没有安装flash player的用户自动下载播放器，或许你可以省略掉这些代码。 <BR>&nbsp; EMBED标签是用于Netscape Navigator2.0及以后的浏览器或其它支持Netscape插件的浏览器。“pluginspage”属性告诉浏览器下载flash player的地址，如果还没有安装flash player的话，用户安装完后需要重启浏览器才能正常使用。 <BR>&nbsp; 为了确保大多数浏览器能正常显示flash，你需要把EMBED标签嵌套放在OBJECT标签内，就如上面代码例子一样。支持Activex控件的浏览器将会忽略OBJECT标签内的EMBED标签。Netscape和使用插件的IE浏览器将只读取EMBED标签而不会识别OBJECT标签。也就是说，如果你省略了EMBED标签，那firefox就不能识别你的flash了（不过纳闷的是，省略了object只写embed，IE也能正常显示flash，呵呵，具体的再仔细看看了）。</P>
<P>&nbsp;</P>
<P>本文列出了用于发布影片的OBJECT和EMBED标签的必要以及可选属性。 <BR><BR><STRONG>一、必需属性：</STRONG> <BR>&nbsp; <STRONG>·CLASSID</STRONG>-设置浏览器的Activex控件，仅用于OBJECT标签。 <BR>&nbsp; <STRONG>·CODEBASE</STRONG>-设置flash Activex控件的位置，因而如果浏览器如果没有安装的话，可以自动下载安装。仅用于OBJECT标签。 <BR>&nbsp; <STRONG>·WIDTH</STRONG>-以百分比或象素指定flash影片的宽度。 <BR>&nbsp; <STRONG>·HEIGHT</STRONG>-以百分比或象素指定flash影片的高度。 <BR>&nbsp; <STRONG>·SRC</STRONG>-指定影片的下载地址。仅用于EMBED标签。 <BR>&nbsp; <STRONG>·PLUGINSPAGE</STRONG>-设置flash 插件的位置，因而如果浏览器如果没有安装的话，可以自动下载安装。仅用于EMBED标签。 <BR>&nbsp; <STRONG>·MOVIE</STRONG>-指定影片的下载地址。仅用于OBJECT标签。 <BR><BR><STRONG>二、可选属性及可用的值：</STRONG> <BR>&nbsp; <STRONG>·ID</STRONG>-设定变量名，用于脚本代码的引用。仅用于OBJECT。 <BR>&nbsp; <STRONG>·NAME</STRONG> -设定变量名，用于脚本代码（如javascript）的引用。仅用于EMBED。 <BR>&nbsp; <STRONG>·SWLIVECONNECT</STRONG> - （true或false）指定当flash player第一次下载时，是否启用java。如果些属性省略，默认值为false。你果你在相同页同使用javascript和flash，java必须使用FSCommand来工作。 <BR>&nbsp; <STRONG>·PLAY</STRONG> -（true或false）指定flash影片是否在下载完成后就自动播放，如果省略此属性，则默认为true。 <BR>&nbsp; <STRONG>·LOOP</STRONG> - （true或false）指定影片播放完最后一帧后是停止还是继续循环播放，如果省略此属性，则默认为true。 <BR>&nbsp; <STRONG>·MENU </STRONG>- （true或false） <BR>&nbsp;&nbsp;&nbsp; ·True 显示全部的菜单，允许用户放大，缩小等控制影片播放等操作。 <BR>&nbsp;&nbsp;&nbsp; ·False 显示只包含设置选项和关于flash的菜单。 <BR>&nbsp; <STRONG>·QUALITY</STRONG> - (low, high, autolow, autohigh, best ) <BR>&nbsp;&nbsp;&nbsp;&nbsp; ·Low 速度优于美观，而且不应用反锯齿。 <BR>&nbsp;&nbsp;&nbsp;·Autolow 刚开始着重于速度，但当需要时随时提升美观。 <BR>&nbsp;&nbsp;&nbsp;·Autohigh 同时着重播放速度和美观，但需要时则牺牲美观来保证播放速度。 <BR>&nbsp;&nbsp;&nbsp;·Medium 应用一些反锯齿而不平滑位图。它质量高于low设置而低于high设置。 <BR>&nbsp;&nbsp;&nbsp;·High&nbsp;美观优于播放速度，而且一直应用反锯齿。如果影片不包含动画，位图会被平滑化;而如果影片包含动画，位图将不变平滑。 <BR>&nbsp;&nbsp;&nbsp;·Best 提供最好的显示质量而不考虑播放速度。所有输出都应用反锯齿及所有位图都被平滑化。 <BR>&nbsp; <STRONG>·SCALE</STRONG> - (showall, noborder, exactfit) <BR>&nbsp;&nbsp;&nbsp;&nbsp; ·Default(Show all)影片在指定的区域内显示，但保持原始的比例。影片两侧将会出现边框。 <BR>&nbsp;&nbsp;&nbsp;·No Boder 收缩影片以适合指定的区域，保持影片不失真，但部分影片将可能将裁切。然而保持影片的原始比例。 <BR>&nbsp;&nbsp;&nbsp;·Exact Fit 使整个影片在指定的区域内显示，影片有可能变形失真，而且不保持原始的比例。 <BR>&nbsp; <STRONG>·ALIGN</STRONG> - (l, t, r, b) <BR>&nbsp;&nbsp;&nbsp;·默认为居中，当浏览器窗口小于影片时，边缘会被裁切。 <BR>&nbsp;&nbsp;&nbsp;·Left,Right,Top,Bottom按照相应的设置沿浏览器的边缘对齐。如果需要，另外三边将被裁切。 <BR>&nbsp; <STRONG>·SALIGN</STRONG> - (l, t, r, b, tl, tr, bl, br) <BR>&nbsp;&nbsp;&nbsp;·L,R,T,B <BR>&nbsp;&nbsp;&nbsp;·TL,TR <BR>&nbsp;&nbsp;&nbsp;·BL,BR <BR>&nbsp; <STRONG>·WMODE</STRONG>- (window, opaque, transparent) 设置flash影片的window mode属性，指定flash在浏览器中的透明，层叠及位置。 <BR>&nbsp;&nbsp;&nbsp;·Window 影片在浏览器中自己的矩形窗口内播放。 <BR>&nbsp;&nbsp;&nbsp;·Opaque 影片隐藏了所有在它后面的内容。 <BR>&nbsp;&nbsp;&nbsp;·Transparent 使flash影片透明，显示透明影片后面的网页内容。这将会降低动画的性能。而且这个属性不是在所有浏览器中都可用的。 <BR>&nbsp; <STRONG>·BGCOLOR </STRONG>- （#RRGGBB, 十六进制RGB值。）指定影片的背景颜色。使用这个属性覆盖flash中设定的背景颜色。 <BR>&nbsp; <STRONG>·BASE</STRONG> - 设定基准目录或URL，用来解决所以flash中的相对路径。类似网页中的&lt;base&gt;标签。 <BR>&nbsp; <STRONG>·FLASHVARS</STRONG> 传递变量到flash player，需要flash player6及以后的版本。 <BR>&nbsp;&nbsp;&nbsp;·传递root级变量到影片。字符串的格式是用“&amp;”分隔的name=value集。 <BR>&nbsp;&nbsp;&nbsp;·浏览器支持64kB大小的字符串长度。 <BR>&nbsp;&nbsp;&nbsp;·更多关于FlashVars的信息，请查看相关文档。 <BR></P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=432</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2006-04-11 17:21</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=376</guid>
			<title>Flash 8 Professional Copy Pixels位图象素复制</title>
			<author>Calchas</author>
			<description><![CDATA[<FONT size=3>　　除了Flash 8 中自带的各种简单Filter滤镜效果之外，还对bitmapData位图对象提供了非常强大的象素操作。当然，有了象素级的操作，最直接的用途就是我们可以直接控制位图中的每个点，改变他的颜色、位置，能直接创造属于自己的丰富的滤镜，当然，前途是美好的，一定要注意执行效率，虽然Flash Player8的效率已经大为提高，不过我还是在试验各种象素操作中误入超大运算而死机……。 </FONT>
<P><FONT size=3>　　今天的例子是最为简单的一个得到象素并复制到一个新对象中的操作，不过有了这个功能，位图操作的可能性就无限量了。</FONT></P>
<P><FONT size=3>　　Flash代码:<BR></FONT></P><PRE class="codebox cb w60"><FONT size=3>            import flash.display.*;<BR>            import flash.geom.*;<BR>            //导入本例所需要的二个Pageage
          <BR>            var sourceBD:BitmapData = BitmapData.loadBitmap(”mypic”);<BR>
            //创建bitmapData对象以用于存放源图片,源图已在库中并命名为mypic<BR>
          <BR>            var mc:MovieClip = this.createEmptyMovieClip(”mc”, this.getNextHighestDepth());<BR>
            mc._x = 25;<BR>
            mc._y = 100;<BR>
            mc.attachBitmap(sourceBD,mc.getNextHighestDepth());<BR>
            //在Stage上创建空MC,并使用MC的attachBitmap方法将刚才创建的bitmapData对象读取到这个MC中<BR>
          <BR>            var targetBD:BitmapData = new BitmapData(230, 230, false, 111111);<BR>
            //创建另一个bitmapData对象作为复制目标<BR>
          <BR>            var mc2:MovieClip = this.createEmptyMovieClip(”mc”, this.getNextHighestDepth());<BR>
            mc2._x = 290;<BR>
            mc2._y = 100;<BR>
            mc2.attachBitmap(targetBD,mc.getNextHighestDepth());<BR>
            //同样在Stage上创建空MC用于存放复制目标<BR>
          <BR>            mc.onRollOver = function() {<BR>
            //当鼠标移动到拥有源图的MC上时,开始CopyPixels<BR>
            copyPixels();<BR>
            };<BR>
            mc.onRollOut = function() {<BR>
            //移出状态停止Copy<BR>
            stopcopyPixels();<BR>
            };<BR>
            //Copy Pixels Function<BR>
            function copyPixels() {<BR>
            this.onMouseMove = function() {<BR>
            setCursor();//设置鼠标光标<BR>
            var point:Point = new Point(_xmouse, _ymouse);<BR>
            mc.globalToLocal(point);<BR>
            //得到当前鼠标座位,并使用globalToLocal转换为MC内部的坐标值<BR>
            var rect:Rectangle = new Rectangle(point.x, point.y, 20, 20);<BR>
            /*创建一个Rectangle对象用以确定要复制的矩形区域<BR>
            Rectangle对象是Flash8中新增对象,包的位置在flash.geom.Rectangle,flash.geom对象<BR>
            除了拥有Rectangle矩形数据对象之外,还有其它用于存放几何数据的对象类型,包｝<BR>
            括Point,Tranform等<BR>
            Rectangle的构造方式为<BR>
            public Rectangle(x:Number, y:Number, width:Number, height:Number)<BR>
            x,y:起始座位<BR>
            width,height:矩形的宽和高,最终将建立一个从 x,y到 x+width,y+height的矩形区域数据<BR>
            */<BR>
            var dest:Point = new Point(point.x, point.y);<BR>
            //建立dest对象用于存放目标点<BR>
            targetBD.copyPixels(sourceBD,rect,dest);<BR>
            /*这里就是本例操作的关键方法,copyPixels,用于将源图中的某个区域的象素复制到当前<BR>
            对象中构造方式为public copyPixels(sourceBitmap:BitmapData, sourceRect:Rectangle,<BR>
            destPoint:Point, alphaBitmap:BitmapData, alphaPoint:Point, mergeAlpha:Boolean)<BR>
            sourceBitmap:需要复制的源图,为BitmapData对象类型,这里就套用为前面建立的sourceBD<BR>
            sourceRect:复制区域<BR>
            deskPoint:目标点,明确将区域复制到本对象的哪一个位置,本例中完全还原源图的象素所在位置<BR>
          <BR>            以下几个参数在本例中都没有使用到<BR>
            alphaBitmap和alphaPoint:表示可以通过另一个图片用于在复制的时候对源图产生一个alpha通道<BR>
            来创建带alpha通道效果的复制结果.<BR>
            mergeAlpha的属性是指是否启用源图的alpha通图,但目前没有调试出具体效果,有待再研究.*/<BR>
            };<BR>
            }<BR>
            function stopcopyPixels() {<BR>
            //停止copyPixels<BR>
            clearCursor();<BR>
            delete this.onMouseMove;<BR>
            }<BR>
            function setCursor() {<BR>
            //设置鼠标为方型图案<BR>
            sourceCursor_mc.swapDepths(_root.getNextHighestDepth());<BR>
            sourceCursor_mc.startDrag(true);<BR>
            targetCursor_mc.swapDepths(_root.getNextHighestDepth());<BR>
            targetCursor_mc._x = sourceCursor_mc._x+265;<BR>
            targetCursor_mc._y = sourceCursor_mc._y;<BR>
            Mouse.hide();<BR>
            }<BR>
            function clearCursor() {<BR>
            //恢复鼠标<BR>
            sourceCursor_mc.stopDrag();<BR>
            sourceCursor_mc._x = -50;<BR>
            sourceCursor_mc._y = -50;<BR>
            targetCursor_mc._x = -50;<BR>
            targetCursor_mc._y = -50;<BR>
            Mouse.show();<BR>
            } 
          </FONT></PRE><FONT size=3>　　以此类推，对于其它滤镜，也能方便的通过此方法用AS简单实现。相对于MovieClip的Filter方法， Flash8中的bitmapdata对象则提供了更为强大的对位图操作的功能，bitmapdata除了应用滤镜对象外，通过象素及色彩控制，可以完全创建属于自己的更为丰富的滤镜特效，以后的Flash资源站上肯定将出现一类叫“Flash滤镜”下载了。<BR></FONT>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=376</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-03 08:24</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=375</guid>
			<title>Flash 8 Professional ActionScript Filter Class滤镜入门</title>
			<author>Calchas</author>
			<description><![CDATA[<FONT size=3>　　Flash 8 最显著的变化是吸收了Director中的位图操作功能，非常棒的功能，让Flash动画也能支持位图的实时运算，再也不用借助于各种Mask去模拟位图特效了。Flash8本身的ActionScript也内置了几款常用的Filter Class滤镜类，包括有Blur (模糊),Bevel(浮雕),DropShadow(阴影),GlowFilter(发光)等，通过简单的AS语法也能快速操作位图达到我们想要的实时特效，今天首先尝试的时候Blur Filter模糊滤镜。 </FONT>
<P><FONT size=3>　　打开Flash 8,在Stage中导入要操作的图片，并为MC其命名为myPic_mc；</FONT></P>
<P><FONT size=3>　　在第一帧上使用以下代码:</FONT></P><PRE class="codebox cb w60"><FONT size=3>           import flash.filters.BlurFilter;<BR>
            //导入BlurFilter 的package <BR>
          var myBlurfilter:BlurFilter = new BlurFilter(60, 60, 1);<BR>
            /*<BR>
            建立flash.filters.BlurFilter的实例，使用方法为<BR>
            var myInstanceName: BlurFilter= new BlurFilter(blurX:Number, blurY:Number, 
            quality:Number);<BR>
            blurX和blurY模糊值分别指的是画面横向和纵向的模糊强度，范围从1~100;<BR>
            quality指的是模糊渲染的质量，范围从1~15，默认值为1质量较低，2质量居中，当为3时<BR>            质量接近Photoshop中的高斯模糊（Gaussian 
            blur），已属较高质量，在大多数应用当中使用1~3的值即可，太高将影响运算效率。<BR>
            */<BR><BR>
          var filterArray:Array = new Array();<BR>
            filterArray.push(myBlurfilter);<BR>
            //向filterArray数组新增一个滤镜对象<BR>
            myPic_mc.filters = filterArray;<BR>
            /*<BR>
            在新版Flash 8中，movieClip Class已经增加新的方法filters用于应用滤镜对象，但<BR>            filters方法不直接接收滤镜对象，必须先将滤镜对象装入一个对象数组，再应用<BR>            于MovieClip，当然，装入对象数组后的滤镜对象也可以通过数组直接修改滤镜对象的属性，例如：<BR>
            filterArray[0].blurX=10;<BR>
            filterArray[0].blurY=10;<BR>
            将blurX,blurY的值重置为10<BR>
            */ <BR>
          </FONT></PRE><FONT size=3>　　以此类推，对于其它滤镜，也能方便的通过此方法用AS简单实现。相对于MovieClip的Filter方法， Flash8中的bitmapdata对象则提供了更为强大的对位图操作的功能，bitmapdata除了应用滤镜对象外，通过象素及色彩控制，可以完全创建属于自己的更为丰富的滤镜特效，以后的Flash资源站上肯定将出现一类叫“Flash滤镜”下载了。<BR></FONT>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=375</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-03 08:24</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=374</guid>
			<title>FlashMX2004的事件机制:从AsBroadcaster到EventDispatche</title>
			<author>Calchas</author>
			<description><![CDATA[<DIV id=tutorContentBox>
<P><FONT size=3>EventDispatcher类有2个静态方法: </FONT></P><PRE class="codebox cy w60"><FONT size=3>  static function initialize(object:Object):Void<BR>
  //object:对象<BR>
  //initialize:初始化方法，为对象object附加上作为事件源(在这里可以理解为派遣中心吧)的各项功能。<BR>
  static function _removeEventListener(queue:Object, event:String, handler):Void<BR>
  //一个内部方法,注销监听事件源相关事件的监听者,removeEventListener方法会调用它.<BR><BR>
  EventDispatcher类有4个公共方法:<BR>
  function dispatchEvent(eventObj:Object):Void<BR>
  /*事件派遣方法，向外界广播一个消息，并附有关于消息的相关描述(请与broadcastMessage(msg:String)方法比较)<BR>
  eventObj:事件对象，它至少应含有2个属性,假设司令部为一个事件派遣中心，一般定义如下:<BR>
  var eventObj=new Object();<BR>
  eventObj.target=司令部;//定义广播消息的对象<BR>
  eventObj.type="on进攻";//定义消息的具体类型 <BR>
  其中target属性也可以不定义，dispatchEvent方法会将它设为默认的广播消息的对象。<BR>
  */<BR>
  function dispatchQueue(queueObj:Object, eventObj:Object):Void<BR>
  /*这个方法的中文意思，我根据它的功能将它称为"事件传达"。<BR>
  queueObj:一个事件派遣中心对象<BR>
  eventObj:事件对象,注意:与 dispatchEvent不同，它的target并无默认值，需要你手工设定.<BR>
  为什么将这个方法称为事件传达呢?因为它可以让当前的事件派遣中心指示另一个事件派遣中心<BR>(方法的第一个参数)向外界广播消息。其实在dispatchEvent方法的内部就调用了dispatchQueue，只<BR>是将参数queueObj设为当前的事件派遣中心罢了。<BR>
  */<BR>
  function addEventListener(event:String, handler):Void<BR>
  /*注册某个事件的监听者<BR>
  event:监听的事件名称<BR>
  handler:监听事件的对象<BR>
  这个方法与AsBroadcaster类的addListener方法相比，多出了参数event，<BR>
  明确了所监听的具体事件。<BR>
  */<BR>
  function removeEventListener(event:String, handler)<BR>
  /*注销某个事件的监听者<BR>
  event:事件名称<BR>
  handler:要注销的监听事件的对象<BR>
  这个方法与AsBroadcaster类的removeListener方法相比，多出了参数event，明确了从哪个事件中<BR>
注销监听对象。<BR>
  */</FONT></PRE><FONT size=3>　　下面就让我们在战场上实战一下EventDispatcher吧。假设有两个指挥中心，一个是司令部，<BR>一个是战地<BR>指挥部。有三个兵种，分别是炮兵、步兵和敢死队。司令部可以指挥炮兵的进攻、驻守和步兵的驻守，战地<BR>指挥部可以指挥步兵的进攻、冲锋和敢死队的冲锋，并且司令部可以向战地指挥部传达指示。下面是实现上<BR>述复杂关系的代码: </FONT><PRE class="codebox cy w60"><FONT size=3>  import mx.events.EventDispatcher;<BR>
  //导入 mx.events.EventDispatcher类<BR>
  var 司令部 = new Object();<BR>
  司令部.名称 = "司令部";<BR>
  EventDispatcher.initialize(司令部);<BR>
  //为司令部对象附加上派遣中心的相关功能。<BR>
  var 战地指挥部 = new Object();<BR>
  战地指挥部.名称="战地指挥部";<BR>
  EventDispatcher.initialize(战地指挥部);<BR>
  //为战地指挥部对象附加上派遣中心的相关功能。
</FONT><P><FONT size=3>var 步兵 = new Object();<BR>
  步兵.on进攻 = function(eventObj) {<BR>
  　　　　　//步兵的'on进攻'事件处理方法，记住需要有参数<BR>
  var 来自=eventObj.target.名称;<BR>
  　　　　　//eventObj.target引用广播'on进攻'事件的对象，用它可以访问事件源并反馈消息。<BR>
  var 阵地=eventObj.阵地;<BR>
  　　　　　 //获取事件的关于' 阵地'属性值<BR>
  trace("步兵接到"+来自+"来电，轻装上阵，火速向敌方"+阵<BR>
地+"前进!");<BR>
  };<BR>
  步兵.on驻守 = function(eventObj) {<BR>
  var 来自=eventObj.target.名称;<BR>
  trace("步兵接到"+来自+"来电，就地待命，多设岗哨,严防来犯之敌!");<BR>
  };<BR>
  步兵.on冲锋=function(eventObj){<BR>
  var 来自=eventObj.target.名称;<BR>
  var 阵地=eventObj.阵地;<BR>
  trace("步兵接到"+来自+"来电，向敌方"+阵地+"发起冲锋!");</FONT></P>
<P><FONT size=3>}<BR>
  司令部.addEventListener("on驻守", 步兵);<BR>
  //向司令部的'on驻守'事件注册监听对象'步兵'<BR>
  战地指挥部.addEventListener("on进攻", 步兵);<BR>
  //向司令部的'on进攻'事件注册监听对象'步兵'<BR>
  战地指挥部.addEventListener("on冲锋",步兵);<BR>
  //向战地指挥部的'on冲锋'事件注册监听对象'步兵'<BR>
  var 炮兵 = new Object();<BR>
  炮兵.on进攻 = function(eventObj) {<BR>
  var 来自=eventObj.target.名称;<BR>
  var 阵地=eventObj.阵地;<BR>
  trace("炮兵接到"+来自+"来电，向敌方"+阵地+"阵地猛<BR>
烈轰击!");<BR>
  };<BR>
  炮兵.on驻守 = function(eventObj) {<BR>
  var 来自=eventObj.target.名称;<BR>
  trace("炮兵接到"+来自+"来电，就地待命，保证弹药准备充足!");<BR>
  };<BR>
  司令部.addEventListener("on驻守", 炮兵);<BR>
  司令部.addEventListener("on进攻", 炮兵);<BR>
  var 敢死队=new Object();<BR>
  敢死队.on冲锋=function(eventObj){<BR>
  var 来自=eventObj.target.名称;<BR>
  var 阵地=eventObj.阵地;<BR>
  trace("敢死队接到"+来自+"来电，向敌方"+阵地+"发起冲<BR>
锋!拼死也要拿下！");<BR>
  }<BR>
  战地指挥部.addEventListener("on冲锋",敢死队); </FONT></P>
<P><FONT size=3>//---------------------------------------------------------------------<BR>
  trace("司令部指示:");<BR>
  var eventObj1 = new Object();<BR>
  //定义事件对象eventObj1<BR>
  eventObj1.target = 司令部;<BR>
  //定义事件对象eventObj1的target属性值为司令部<BR>
  eventObj1.type = "on进攻";<BR>
  //定义事件对象的事件类型为'on进攻'<BR>
  eventObj1.阵地="505阵地"<BR>
  //一个自定义的属性'阵地',你可以附加更多其他的属性<BR>
  司令部.dispatchEvent(eventObj1);<BR>
  //司令部将定义好的事件对象广播出去，只有向它注册了'on进攻'属性的监听对象才能收到。<BR>
步兵并不会发动进攻。<BR>
  trace("战地指挥部指示:");<BR>
  var eventObj2=new Object();<BR>
  //eventObj2.target=战地指挥部;<BR>
  //因为dispatchEvent方法会自动将事件对象的target属性设为默认的广播消息的对象，所以这句<BR>
也可以注释掉。<BR>
  eventObj2.type = "on进攻";<BR>
  eventObj2.阵地="105阵地"<BR>
  战地指挥部.dispatchEvent(eventObj2);<BR>
  trace("传达司令部指示:");<BR>
  var eventObj3=new Object();<BR>
  eventObj3.target=战地指挥部;<BR>
  //这里必须设定事件对象的target属性。因为dispatchQueue不会为target属性设定默认值<BR>
  eventObj3.type="on冲锋";<BR>
  eventObj3.阵地="123阵地";<BR>
  司令部.dispatchQueue(战地指挥部,eventObj3);<BR>
  //战争时期也许司令部并不知道前线部队的布置情况，所以它可以将指令传达给战地指挥部，由战<BR>
地指挥部将事件对象广播给向自己的相关事件注册的监听对</FONT></P></PRE><BR><FONT size=3>　　 具体的测试结果我就不贴出来了。最后说说EventDispatcher类的几个有趣的地方:<BR><BR>　　 1、监听事件的对象可以是Object、MovieClip，还可以是Function.例如：<BR>假设在战场上每当发起冲锋时，都要呐喊助威，可以这样写： </FONT><PRE class="codebox cy w60"><FONT size=3>  function 鼓励士气(){<BR>
  trace("冲啊!杀啊!");<BR>
  }<BR>
  战地指挥部.addEventListener("on冲锋",鼓励士气);</FONT></PRE><FONT size=3>　　 <BR><BR>　　2、当监听事件的对象是自身时,一般的写法是这样的: </FONT><PRE class="codebox cy w60"><FONT size=3>战地指挥部.on冲锋=function(){<BR>
  trace("同志们，我们一定会取得最后的胜利！");<BR>
  }<BR>
  战地指挥部.addEventListener("on冲锋",战地指挥部);<BR>
  但是还有一种更简洁的写法:<BR>
  战地指挥部.on冲锋Handler=function(){<BR>
  trace("同志们，我们一定会取得最后的胜利！");<BR>
  }</FONT></PRE><BR><FONT size=3>　　 这种写法不再需要用"addEventListener"来注册了。它有两点需要注意,一是它总在其他监听对象的事件处理之前执行，再就是它无法用'removeEventListener'方法注销监听。<BR><BR>　　 3、监听对象的事件处理程序也可以这样写: </FONT><PRE class="codebox cy w60"><FONT size=3>步兵.handlerEvent=function(eventObj){<BR>
  var 来自=eventObj.target.名称;<BR>
  var 阵地=eventObj.阵地;<BR>
  var e=eventObj.type;<BR>
  switch(e){<BR>
  case "on进攻":<BR>
  trace("步兵接到"+来自+"来电，轻装上阵，火速向敌方"+阵地+"前进!");<BR>
  break;<BR>
  case "on驻守":<BR>
  trace("步兵接到"+来自+"来电，就地待命，多设岗哨,严防来犯之敌!");<BR>
  break;<BR>
  case "on冲锋":<BR>
  trace("步兵接到"+来自+"来电，向敌方"+阵地+"发起冲锋!");<BR>
  break;<BR>
  default:<BR>
  break;<BR>
  }<BR>
  司令部.addEventListener("on驻守", 步兵);<BR>
  战地指挥部.addEventListener("on进攻", 步兵);<BR>
  战地指挥部.addEventListener("on冲锋",步兵);</FONT><P></P></PRE>
<P><FONT size=3>　　好了，关于EventDispatcher类到此就介绍完了，希望大家能够掌握Flash的事件机制并灵活地运用它们。<BR></FONT></P>
<P><FONT size=3></FONT></P></DIV>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=374</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-03 08:23</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=373</guid>
			<title>FlashMX2004的事件机制:从AsBroadcaster到EventDispatche</title>
			<author>Calchas</author>
			<description><![CDATA[<P>　　AsBroadcaster(广播)类在MX(flash6)里写做"ASBroadcaster",这是为什么有时会发生以前的程序在2004版里发生异常的原因之一。AsBroadcaster 类具有四个静态的方法:<BR></P><PRE class="codebox cy w60">static function initialize(o:Object);<BR>
//o:对象<BR>
//initialize:初始化方法，为对象o附加上作为事件源的各项功能。那么事件源都有什么功能呢？<BR>
static function broadcastMessage(msg:String);<BR>
//msg:消息<BR>
//broadcastMessage:广播方法，事件源的一个主要功能就是向外界广播一条消息，告知听广播的人"某一事件发生啦!"<BR>
static function addListener(o:Object);<BR>
//o:对象<BR>
//addListener:注册监听者方法，也就是决定广播消息给谁听的意思<BR>
static function removeListener(o：Object);<BR>
//o:对象<BR>
//removeListener:注销监听者方法，也就是消息不再广播给谁听<BR>
</PRE>　　如此看来AsBroadcaster类也不怎么复杂嘛，下面看看它的具体使用吧! <PRE class="codebox cy w90">  var 司令部=new Object();<BR>
  //啊，司令部是个发布指挥消息的地方，用它做事件源是个不错的选择<BR>
  AsBroadcaster.initialize(司令部);<BR>
  //这里直接用AsBroadcaster来引用AsBroadcaster类,原因如上述<BR>
  //调用AsBroadcaster类的静态方法initialize,为司令部附加上作为事件源的各项功能<BR>
  var 步兵=new Object();<BR>
  //生成步兵对象<BR>
  步兵.on进攻=function(){<BR>
  //on进攻: 这里之所以用'on'做前缀，是为了表明这个方法是响应一定事件的方法<BR>
  trace("步兵接到司令部来电，轻装上阵，火速向敌方阵地前进!");<BR>
  // 接到'on进攻'消息后采取的措施<BR>
  }<BR>
  步兵.on驻守=function(){<BR>
  //同上<BR>
  trace("步兵接到司令部来电，就地待命，多设岗哨,严防来犯之敌!");<BR>
  }<BR>
  司令部.addListener(步兵);<BR>
  //将步兵添加为司令部的监听者，从现在起他将听从司令部的指令行事<BR>
  //以下雷同的地方，恕不赘述<BR>
  var 装甲兵=new Object();<BR>
  装甲兵.on进攻=function(){<BR>
  trace("装甲兵接到司令部来电，加足马力，火速向敌方阵地开进!");<BR>
  }<BR>
  装甲兵.on驻守=function(){<BR>
  trace("装甲兵接到司令部来电，就地待命，检修装甲,作好随时进攻的准备!");<BR>
  }<BR>
  司令部.addListener(装甲兵);<BR>
  var 炮兵=new Object();<BR>
  炮兵.on进攻=function(){<BR>
  trace("炮兵接到司令部来电，向敌方阵地猛烈轰击!");<BR>
  }<BR>
  炮兵.on驻守=function(){<BR>
  trace("炮兵接到司令部来电，就地待命，保证弹药准备充足!");<BR>
  }<BR>
  司令部.addListener(炮兵);<BR>
  //-------------------下面开始演示------------------------------------<BR>
  trace("司令部一号指示");<BR>
  司令部.broadcastMessage("on进攻");<BR>
  //司令部用'broadcastMessage' 方法广播'on进攻'指令<BR>
  trace("司令部二号指示");<BR>
  司令部.removeListener(步兵);<BR>
  //"将在外，君令有所不授"，司令部用'removeListener'方法注销了'步兵'听从指令的义务<BR>
  司令部.broadcastMessage("on驻守");<BR>
  //司令部用'broadcastMessage' 方法广播'on驻守'指令。注意:步兵现在不会驻守哦<BR>
</PRE>
<P>　　具体的测试结果，大家试试便知。现在我们看看AsBroadcaster类的局限所在:<BR><BR>　　1、如果司令部发出的指令是"向一号高地进攻"，这个消息应该怎么广播呢?我们当然可以为步兵定义一个'on向一号高地进攻'的方法,然后监听司令部广播的'on向一号高地进攻'的消息。可是如果需要发出N个'向某高地进攻'的指令，岂不是要定义N个类似的事件方法？如果进攻的目标是随即确定的，那又该怎么去写?如果步兵同时监听"战地指挥部"的广播，他怎样根据不同的指挥者采取不同的措施？步兵并不能确定一个'on进攻'消息是来自司令部还是'战地指挥部'呀。所以说，AsBroadcaster类的第一个局限就是它虽然广播了一个'消息'，却不能给出消息的具体说明。<BR><BR>　　2、我们知道战争时期为了做到策略的"因时因地制宜"，常常会设一个"战地指挥部"。假设我们希望把步兵的进攻的指挥权交给"战地指挥部"，而把步兵的驻守权交给"司令部"。因为司令部同时拥有装甲兵和炮兵的进攻与驻守的指挥权，所以它可以广播"on进攻"消息,但一件意想不到事将会发生:步兵也跟着进攻了!<BR>为了防止出现差错，司令部就不得不在进攻前"removeListener(步兵)"。但为了防止广播 "on驻守"消息时步兵不再驻守，所以在广播完"on进攻"消息后必须再次"addListener(步兵)"。司令部何其累哉!所以说，AsBroadcaster类的第二个局限就是它注册了一个监听者，却并不关心监听者到底是监听它的什么事件。<BR><BR>　　3、AsBroadcaster类的第三个局限其实是由第二个局限来的，就是它有些情况下会造成运行的低效。假设还有一支空军, 它有"on空袭"事件方法,并且归司令部指挥。当司令部广播"on空袭"消息时，得，步兵、装甲兵和炮兵就会也试图执行"on空袭"事件方法，当然是浪费时间啦.</P>
<P>　　说了AsBroadcaster类这么多局限的地方，并不是说AsBroadcaster类不好，而是说要根据情况选择使用不同的事件机制。如果不涉及到上面说的几种情况，用AsBroadcaster类其实很方便的(比EventDispatcher类要省事)。也正因为AsBroadcaster类有这么多局限的地方，才使我们的主角EventDispatcher类登上了光辉的舞台，请看我们下篇的讲述吧!<BR>------------------------------------------------------------------------<BR>补充1:<BR>　　AsBroadcaster.initialize(o)方法会为o创建一个"_listener"数组，它用来存储所有的监听者对象。<BR><BR>补充2:<BR>　　FlashMX 2004里还有个mx.transitions.BroadcasterMX类，它比AsBroadcaster的功能要强大，支持广播消息时附带更多的参数，可以对消息进行更多描述。</P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=373</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-03 08:22</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=365</guid>
			<title>flash遮罩特效的综合操练（入门级教程）</title>
			<author>Calchas</author>
			<description><![CDATA[<P>关于遮罩的教程很多了，这里结合我的摸索过程及创意给大家尤其是初学者作一简单讲解。 <BR><BR>一.原理部分--羽化的美眉效果 <BR><BR>flash的遮罩原理在于使用一个图形作为透过光线的区域，当这个图形所在层转为遮罩层时，图形区域下一层的物体可见，而图形区域外的物体不可见。但是再往下一层的物体仍然可见，也就是说，遮罩层只对它下面一层物体起作用。 <BR>好，下面就步入正题，介绍一个羽化美眉效果，这在photoshop中是很容易实现的。 <BR><BR>1.从图片库中找个漂亮的美眉，导入到舞台上，放在合适的位置，给当前层起个名字，如下图：</P>
<P align=center><IMG height=405 src="http://www.flashempire.com/school/img4/2004092201.jpg" width=531 border=1></P>
<P align=left><BR>2.新建一层，起名mask，在当前层上用圆形工具画一个树立着的椭圆，椭圆最好不要边框线，填充色任意，这个椭圆正好把美眉挡住，如下图： </P>
<P align=center><IMG height=411 src="http://www.flashempire.com/school/img4/2004092202.gif" width=534 border=1></P>
<P align=left>3.将此椭圆选定，按下Ctrl+c, 再新建一层，起名white, 按下Ctrl+shift+v, 这是将椭圆复制到这一层上来，并且与原来椭圆位置相同。 <BR>4.点选mask层，右击将其转为遮罩层，关闭white层就可看到美眉被切割出来的效果，如果位置不满意，解除锁定，重新修改椭圆的位置。 <BR>5.重新点选white层，并选定层上椭圆来修改其填充属性，这里才是最费功夫的环节：打开混色器面板，在填充颜色方式中选放射状，将两个色标的颜色都变成白色，将左边的色标的不透明度改为0，右边的不变， <BR>两色标的位置如下图：</P>
<P align=center><IMG height=273 src="http://www.flashempire.com/school/img4/2004092203.jpg" width=270 border=1></P>
<P align=left>6.色标设定完后，应该是下图这个样子， </P>
<P align=center><IMG height=459 src="http://www.flashempire.com/school/img4/2004092204.gif" width=501 border=1></P>
<P align=left>在物体的空白处单击一下，看看美眉是不是露出来了，美眉的周围是不是以白色淡出呢？ <BR>7.用填充变形工具来反复调整渐变色的区域与大小，这要费点事，效果好不好关键在这里。 <BR>8.最后的效果应该是象这样 </P>
<P align=center><IMG height=447 src="http://www.flashempire.com/school/img4/2004092205.jpg" width=546 border=1></P>
<P align=left>二. 进阶部分－－跟随鼠标的探照灯效果 <BR><BR></P>
<P align=center></EMBED>&nbsp;</P>
<P align=left>有了上面的技术，那么制作一个探照灯效果就只剩下创意和代码编写工作了。具体的制作过程我就不在浪费时间了，估计大家看到我下面的解释及源文件就能理解并自己能作了。 <BR>既然是探照灯效果就应该是黑色背景了，那么为了表现光照的模糊效果，就需要一个椭圆形区域，这个区域的中心是透明的，然后渐变到与背景相同的黑色。这是与上面的例子不同的地方，也算是拟向思维吧！ <BR><BR>1.先来看看层结构 <BR>如下图 </P>
<P align=center><IMG height=228 src="http://www.flashempire.com/school/img4/2004092206.gif" width=234 border=1></P>
<P align=left>最上一层是这个效果需要的控制代码，下来一层是跟随鼠标的圆环，下来是圆环遮罩，下来是圆环经过时发亮的线条，再下来是发暗色的线条，鼠标没有经过时就显示这条线。 <BR>这部分是别人早就做过的东西，这里加上是让大家对遮罩效果有个完整的认识。接下来就是我要重点讲的东西了，shadow层存放产生光照渐变效果的区域，就是上一段说到的东西，这个区域与作为遮罩层motion_mask上的motion_mask电影剪辑形状相同。 <BR>pic层当然是放置用来照射的目标了。 <BR><BR>2.再看看符号库中的演员 </P>
<P align=center><IMG height=273 src="http://www.flashempire.com/school/img4/2004092207.gif" width=285 border=1></P>
<P align=left>我有个习惯，就是符号的名字尽量和它所在层的名字一样，这样好知道哪一层是放的什么。还有就是尽量用英文尽量称呼准确，如果符号多的话要编号归类并放在一个能概括它们的文件夹里。这个作品的符号少，且和层名字对应，就不再解释了。需要解释的，一个是light符号，双击打开它仔细看就会发现，它的尖角正好在舞台的中心上，这是很关键的，因为要让它跟着鼠标转动而尾部不动，其原理就在这儿。另一个是shadow符号，双击进入会发现舞台上黑乎乎什么都看不见，单击图层1就会看见一个扇形网格出现，再将舞台颜色改个颜色，这下可以看清了，是个放射填充形状。选住这个形状，打开属性面板，点击油漆桶旁边的填充颜色，打开填充颜色面板，将鼠标移到面板左上角的矩形区域中，这个区域就是当前区域的填充方式及颜色，单击就会在混色器面板中看到这个填充方式。这里介绍这么详细是因为我原来怎么也不会调出新打开文件中形状的填充属性，实在是惭愧惭愧！当时修改这个填充方式费了不少时间，点击色标可以看到其值。 <BR><BR>3.再解释一下跟随鼠标所用的代码 <BR>actions上的代码： </P>
<TABLE cellSpacing=0 cellPadding=1 align=center border=0>
<TBODY>
<TR>
<TD bgColor=#000000>
<TABLE cellSpacing=0 cellPadding=4 border=0>
<TBODY>
<TR>
<TD class=c bgColor=#ffff99><PRE class=c>this.onEnterFrame = function() { 
  if (_xmouse&gt;620) { 
    light._rotation = -60; 
    //如果鼠标的x轴位置大于620，探照灯light就转－60度，light是探照灯的实例名 
  } else if (_xmouse&lt;80) { 
    light._rotation = 30; 
  } else { 
  //如果鼠标是在80与620之间移动 
  mask._xscale = (_xmouse-50)/4+70; 
  //motion_mask层上的实例mask的宽度随鼠标的位置变化而变化，
  //所以的数字是我认为比较满意的，大家可以修改看看 
  mask._yscale = (_xmouse-50)/4+70; 
  //.........................的高度随................... 
  shadow._xscale = (_xmouse-50)/4+70; 
  //shadow层上的..................宽度.................. 
  shadow._yscale = (_xmouse-50)/4+70; 
  //..............................高度....................... 
  light._rotation = -(_xmouse-260)/6; 
  //设置light的旋转角度，由鼠标的位置计算而来，
  //并将其范围缩小以求符合实际效果，不然就露陷儿了！ 
  mask._rotation = -(_xmouse-260)/6; 
  shadow._rotation = -(_xmouse-260)/6; 
 } 
}; </PRE></TD></TR></TBODY></TABLE>
<DIV align=center></DIV></TD></TR></TBODY></TABLE>
<P align=left>circle和round上的代码就不再解释了，都是来跟随鼠标，贴在鼠标上的。 <BR><BR>三.结束语 <BR><BR>作了半天，这只能算是个小作品，而且也不漂亮，就送给那些和我当年一样开始学习flash的beginers吧！好的作品不仅要有对制作软件的熟练掌握，还要有自己的创意，有时将别人的东西改改，既是一种学习过程，又是一种创造，如果你美术功底好的话，再加上创作热情，初学者一定会变成有成就的闪客的。 <BR><BR>让我们一起成长吧！ </P>
<P align=left><A href="http://www.flashempire.com/school/img4/2004092201.fla">源码下载</A></P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=365</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 16:06</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=364</guid>
			<title>制作简单实用的FLASH导航菜单</title>
			<author>Calchas</author>
			<description><![CDATA[<P>相信大家都对现在的FLASH导航情有独钟,但是对一些的FLASH特效望尘莫及（我就是其中一位：），特别是复杂的AS动作脚本。不过，通过自己的学习发现，一些很难理解的程序可以通过简单的AS动作脚本表现出同样的效果,今天我就来讲一个例子,可以让一些和我一样的FLASH的初学者（懂基础AS动作脚本程序的FLASHER）！希望大家有所体会，有所收获（在下献丑了-_-！） </P>
<P align=center>先来说说知名的《闪客帝国》的导航栏：<BR>这种效果的导航栏在国内国外的例子很多的，很实用！只不过他们表现的形式不一样罢了，比如一些是子菜单是横向出现的http://www.flashemprie.com，一些是向下笔直出现的http://www.designnet.co.kr/...不一一举例了。</P>
<P>1.分析他的动作原理<BR>a.当的鼠标点击菜单栏的其中一个栏目时（比如资讯中心）（如图一），相应的[资讯中心栏目]的子菜单出现效果,(以《闪客帝国》为例，就是子栏目(频道首页 业界 动漫 帝国 活动 杂谈)向下运动,出现一些可以点击进入相应栏目的按扭。</P>
<P><IMG height=100 src="http://www.flashempire.com/school/img4/2004051302.gif" width=500></P>
<P>b.当的鼠标点击菜单栏的另一个栏目时（比如闪客帝国）(见图二),[资讯中心栏目]的子栏目消失，相应的[闪客帝国栏目]的子菜单出现效果．知道了他的原理就可一大家大胆的去尝试各种方法!</P>
<P><IMG height=100 src="http://www.flashempire.com/school/img4/2004051303.gif" width=500></P>
<P>2.动手制作(我知道有时候动手很难:)<BR>a.做好你要的菜单栏,和相应的子菜单(由于主要是讲将程序简单化，其他的细节就不多说了！)<BR>b.选择其中一个栏目[比如公司介绍],把他相应的子菜单拖入主场景,定义子菜单的实例名称为b(见图三);再选择其中一个栏目[比如医学],把他相应的子菜单拖入主场景,定义子菜单实例名称为c(见图四),其他栏目一样的做法！</P>
<P><IMG height=298 src="http://www.flashempire.com/school/img4/2004051304.gif" width=520></P>
<P><IMG height=298 src="http://www.flashempire.com/school/img4/2004051305.gif" width=520></P>
<P>c.点击一个栏目[比如公司介绍],打开他的动作面版输入以下代码（不要想到代码就闪,坚持看下去,代码很简单的：）（见图5）</P>
<P><IMG height=501 src="http://www.flashempire.com/school/img4/2004051306.gif" width=482></P><PRE class="codebox cy w60">on (rollOver) { //当鼠标放上去的时候
  b.gotoAndPlay(2);//场景中实例名称为b的影片剪辑开始从第2帧运动
  a.gotoAndStop(1);//场景中实例名称为a的影片剪辑停在第1帧
  c.gotoAndStop(1);//场景中实例名称为c的影片剪辑停在第1帧
  d.gotoAndStop(1);//场景中实例名称为d的影片剪辑停在第1帧
  e.gotoAndStop(1);//场景中实例名称为e的影片剪辑停在第1帧
  f.gotoAndStop(1);//场景中实例名称为f的影片剪辑停在第1帧
}
on (press) { //当鼠标点击的时候
  getURL("../intro.asp", "_self");//连接相应的网页.并在同一窗口打开
}</PRE>
<P>再来分析一下上面的程序(是不是很简单啊:)<BR>当我们点击一个栏目的时候,和他对应的子栏目开始运动,其他的子栏目全都停在第1帧(用心体会这是关键所在-_-!)。如果你这里搞懂了,就可以举一反三做出很多其他效果的菜单栏了（但是只换汤不换药）！<BR>d.其他栏目输入的程序都一样,就是对应的子栏目的实例名称为改一下哦!</P>
<P>3.补充</P>
<P>至此，一个简单实用的菜单就做好了，可是，你会发现，这个菜单还存在着一个缺陷：当鼠标点击某一个主菜单，出现相应的子菜单，可是鼠标离开菜单之后，子菜单不能随之自动消失，虽然是个细节，但总让人觉得不够完美，下面我们就用一个相对巧妙却简单的方法来解决这个问题。</P>
<P>（1）首先在原来的导航栏中，在主菜单和子菜单以外用一个隐形按钮填充。注意隐形按钮只要在点击区做一块相应的图形,图形要以导航栏的形状不同改变的。如下图</P>
<P><IMG height=352 src="http://www.flashempire.com/school/img4/2004051307.gif" width=459></P>
<P>（2）在主场景上新建一层，在第5帧按F6插入空白关键帧，拖入刚才做好的隐形按钮，然后给按钮增加如下AS代码：</P><PRE class="codebox cy w30">on (rollOver) {　
  a.gotoAndStop(1);
  b.gotoAndStop(1);
  c.gotoAndStop(1);
  d.gotoAndStop(1);
  e.gotoAndStop(1);
  f.gotoAndStop(1);
}</PRE>于是实现当鼠标离开菜单（或者说当鼠标旋停在隐形按钮上）时，子菜单随之消失。如下图 
<P><IMG height=498 src="http://www.flashempire.com/school/img4/2004051308.gif" width=472></P>
<P>3.总结一下<BR>其实很多的程序都通过简单语句编的,这样做简单、易懂不是吗?（但是适合相我这样的初级用户吧-_-!）关于这类FLASH的制作我之前也问过很都的高手,但是他们给我的都是很复杂的代码我真看不下哦！人不可能一步登天的！很多东西都要慢慢学的,希望这个教程对你们有点点帮助和启发吧！（说到这了，不会有朋友什么都没看懂吧!那我可真晕死-_-！）</P>
<P><A href="http://www.flashempire.com/school/img4/2004051307.fla" target=_blank>源文件下载</A></P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=364</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 16:04</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=363</guid>
			<title>FLASH中变量与影片剪辑的命名讲解</title>
			<author>Calchas</author>
			<description><![CDATA[<P class=c align=left>&nbsp;&nbsp;&nbsp;最近看到很多文章里面的代码都被不同程度地误解过,使得有时候不得不把说过的话再详细说一遍.而这其中最常见的一个问题是大家对代码里面的影片剪辑的名称没有搞清楚.以至于在使用高手写的代码的时候实现不了效果.所以,我觉得有必要把我们常提到的几个名称概念说一说,使初学AS的朋友能够更好地理解代码的意思.</P>
<P class=c>一、几个基本概念：</P>
<P class=c>MC：Movie Clip,影片剪辑的简称。而MovieClip是一个影片剪辑对象（这里不讨论）。</P>
<P class=c>btn:Button,按钮简称。同上Button也是一个按钮对象（这里不讨论）。 </P>
<P class=c>主场景：就是最顶端的场景，也是新建一个文件时出现的场景</P>
<P class=c align=left>二、影片中的名称解析</P>
<P class=c align=left>影片中有三种名称,如图：</P>
<P class=c><IMG height=319 src="http://www.flashempire.com/school/img4/122701.jpg" width=569></P>
<P class=c>1、影片剪辑在库中的名称。(图一）<BR>2、影片剪辑在场景中的名称，即通常所说的“实例名”，没有命名的时候用灰色显示“&lt;实例名称&gt;”（图二）<BR>3、影片剪辑链接的名称。（图三、图四）</P>
<P class=c>三个名称中，最常说的就是第二个“实例名”，我们常用MC_name，mc_name等来代替。这个命名是给场景中的一个确定的MC对象（或btn对象）命名，而只有这样命名后才能对该对象进行控制。注意，这个名称不是MC在库中的名称！ 例如：mc_name._x=50;意思是一个实例名为mc_name的影片剪辑（或按钮）的横坐标等于50。而所谓的“mc_”不是命名的固有前缀，你可以写abc._x=50;。</P>
<P class=c>另外一个就是链接的名称，如图所示，这个名称是用在某些特定的语句中的，如attachMvoie()语句。<BR>而影片剪辑在库中的名称则只是库中的一个标志而已，它在代码中没有什么作用。<BR>例如，我们把一个MC的库名称名命为abc,然后拖一个实例到主场景中，并命名为bcd，再把链接的名称命名为def。（提醒一下，链接时，默认的链接名称就是库中的名称，可以改动。）。 <BR>这样做好以后，把下面的代码复制到主场景中的第一帧：</P><PRE class="codebox cy w60">attachMovie("def","efg",1);//将链接名def改为efg
with(efg){
  _alpha=30;
  _x=20;_y=300;
}//对efg的透明度和位置进行了设置
bcd._alpha=60;
abc._alpha=100;</PRE>
<P></P>
<P class=c>Ctrl+Shift+Enter测试，调出调示器，按下调示器上右上的绿色“开始”键。<BR>你会在左上的框中看到各实例。 </P>
<P class=c><IMG height=260 src="http://www.flashempire.com/school/img4/122702.jpg" width=630></P>
<P class=c>其中没有一个叫abc的MC。而会有一个叫efg的MC出现在（20,300)的位置，其透明度为30.</P>
<P class=c><IMG height=348 src="http://www.flashempire.com/school/img4/122703.jpg" width=446></P>
<P class=c>由这个实例可以明显的看出三个名称在AS代码中的应用，和相应的效果了吧？</P>
<P class=c>三、变量的命名原则:</P>
<P class=c>1、变量必须是以字母或者下划线开头,其中可以包括"$"、数字、字母或者下划线。如_mcMc,worl$dcup都是有效的变量名,但是!go,2up,$food就不是有效的变量名了.(这里注意变量的首字符和中间字符)</P>
<P class=c>2、变量不能和保留关健字同名(注意Flash是不区分大小写的),并且不能为true或者false.</P>
<P class=c>3、变量在自己的有效区域里必须唯一.</P>
<P class=c>另,再给出保留关键字列表:<BR>break For New var Continue Function Return void delete </P>
<P class=c>If This while else In Typeof with</P>
<P class=c>以上规则我想在任何一本介绍AS的书中都有,这里再写出来也是为了初学者方便查阅.</P>
<P class=c>濠仔参与讨论：函数的命名宜用动宾结构~如lineTo,moveTo,creatEmptyMovieClip，而且命名时首字母小写，其余的单词首字母大写，mc一般用如mc_id等表示，如mc0,mc1,mc_0,mc_1等。button一般用btn_purpose如btn_play,btn_stop,btn_pause等，呵呵，其实个人喜好有关吧~我是跟着macromeida走的。</P>
<P>还有，macromedia有个习惯……所有的代码都是加在帧上的……（除了些组件要在PROPERTY面板设置参数）。<BR>希望大家也养成这个习惯。</P>
<P class=c>四、文本框的命名</P>
<P class=c>刚刚看见一篇贴子，发现还有一个重要的问题没有提到，就是文本框的名称问题。</P>
<P class=c>如图，框一是实例名称，框二是变量名称。</P>
<P class=c><IMG height=106 src="http://www.flashempire.com/school/img4/122704.png" width=529></P>
<P class=c>如何理解？实例名称与变量名称有什么不同呢？</P>
<P class=c>简单来说，实例名称引用的是整个文本框，而变量名称是指的文本的具体内容。这里的文本框指的是输入文本和动态文本，而不是静态文本。</P>
<P class=c>在这里我想仅就名称问题说说。</P>
<P class=c>比如，我们新建一个文本框，把它调成“动态文本”（如图的左边下拉菜单，而输入文本与之相类，故略去），在实例名称里面输入“abcText",在变量名称里面输入“x”。</P>
<P class=c>OK，现在把下面的代码复制到第一帧：</P><PRE class="codebox cy w30">abcText._x=100;
abcText._y=100;
x="i am a flasher";</PRE>
<P class=c>可以看到，文本框到了（100，100）的地方，而里面显示“i am a flasher”</P>
<P class=c>RedChimae参与讨论： 要是我对文本框的实例命名的话我会这样来命名：txtName。其中Name是该文本框的含义，而txt是文本框的英文缩写，至于文本框的变量命名仍然遵循变量的命名规则。</P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=363</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 14:00</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=362</guid>
			<title>flash mx 2004的项目管理</title>
			<author>Calchas</author>
			<description><![CDATA[<P class=c align=left>flash mx 2004新功能--项目管理--其实他的工作原理基本与dw的相同，如果使用过dw的应该很易上手。</P>
<P class=c align=left>file-new-flash project 建立一个项目文件，里面记录了这个项目里包含了什么文件（fla,as等等...）右鍵-add file就可以加入文件了。</P>
<P class=c align=left>不过这时还不能实现版本管理功能，我们先要设置file-Edit Sites-new</P>
<P class=c align=center><IMG height=563 src="http://www.flashempire.com/school/img4/121805.gif" width=401></P>
<P class=c align=left>此处<BR>local root:是你本机的工作目录，就是临时存放到你机器用的目录<BR>remote root:就是大家一起存到服务器的最新文件所在目录</P>
<P class=c align=left>site建好之后，就可以为project指定site了，到project面板右键-setting,version control指定site后，就可以基本的版本管理了</P>
<P class=c align=left>第一次把文件放到服务器，需要先check out再check in（真的很奇怪，搞得我半天摸不着北）。之后，你每次需要修改文件，先把文件从服务器check out出來，修改完之后check in即可，如果该文件已经被其它人check out了，你会得到警告的提示：如果你强行修改，可能会出现版本错误问题<BR>具体状态见下图</P>
<P align=center><IMG height=313 src="http://www.flashempire.com/school/img4/121804.gif" width=351></P>
<P class=c align=left>上面黃色感叹号的文件代表在本地工作目目里没有此文件，可以从服务器恢复，或是从本地其它目录找回。</P>
<P class=c align=left>温馨小提示，为flash project添加刪除文件之前，別忘记先check out project文件本身喔~</P>
<P class=c align=left>project里面的所有文件还可以使用同样的public setting，面对大批的文件，不用逐个设置了，赞!</P>
<P align=center><IMG height=443 src="http://www.flashempire.com/school/img4/121806.gif" width=349></P>
<P class=c align=left>mx 2004毕竟不是专业项目管理软件，功能也是有限的，更强大就需要 microsoft 的vss了，mx 2004也支持登录SourceSafe，可以不打开vss的客户端就直接操作project里的文件了。</P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=362</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 13:59</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=361</guid>
			<title>Flash MX 2004新特性实例学习七</title>
			<author>Calchas</author>
			<description><![CDATA[<P class=c>　　实例八、Trace Bitmap Panel<BR><BR>　　<FONT color=#000000>一、涉及特性</FONT><BR><BR>　　本实例不太复杂，主要涉及组件的应用、对组件的编程和对JavaScript的应用，都是Flash MX 2004中的新特性。<BR><BR>　　二、制作过程<BR><BR>　　1、从组件栏中拖四个Numeric Stepper到场景中，分别设置属性如下：A、命名为start_stp，设置Maximum为10000，设置Minimum为1，step为1，value为100；B、命名为end_stp，设置Maximum为10000，设置Minimum为0，step为1，value为100；C、命名为color_stp，设置Maximum为100，设置Minimum为0，step为1，value为100；D、命名为area_stp，设置Maximum为500，设置Minimum为0，step为1，value为10。<BR><BR>　　2、从组件栏中拖两个Combo Box到场景中，分别设置属性如下：A、命名为curve_cb，设置labels为“[normal, very tight, pixels, smooth, very smooth]”，设置rowCount为5；B、命名为corner_cb，设置labels为“[normal, many corners, few corners]”，设置rowCount为5。<BR><BR>　　3、从组件栏中拖一个Button到场景中，命名为submit_btn，设置Labels为Submit。然后排列所有组件如图1所示。</P>
<P class=c align=center><IMG height=326 src="http://www.flashempire.com/school/img4/031016flashmx200401.gif" width=254></P>
<P class=c align=left>　　4、在TimeLine中新建一个图层，命名为Actions，在该层的Action面板中增加如下语句：</P><PRE class="codebox cy w90">/* Copyright 2003 Macromedia, Inc. All rights reserved.
The following is Sample Code and is subject to all restrictions 
on such code as contained in the End User License Agreement 
accompanying this product.
*/
function click() {
  var tab = " ";
  var asNewLine = "\n";
//注释;检查各个组件的值，如果为空的话，则设置为“”.
  if (start_stp.value == "") {
    var startKF_as = "\"\"";
  } else {
    var startKF_as = start_stp.value;
  }
  if (end_stp.value == "") {
    var endKF_as = "\"\"";
  } else {
    var endKF_as = end_stp.value;
  }
  if (color_stp.value == "") {
    var threshold_as = "\"\"";
  } else {
    var threshold_as = color_stp.value;
  }
  if (area_stp.value == "") {
    var minArea_as = "\"\"";
  } else {
    var minArea_as = area_stp.value;
  }
  var curveFit_as = _root.curve_cb.value;
  var corner_as = _root.corner_cb.value;
  //注释;构造一个Java Script字符串。有兴趣的话，可以找点相关的资料来看看，不会太难。
  （ActionScript 1.0跟JavaScript是非常像的。）
  var str = "var cur_tl = fl.getDocumentDOM().getTimeline();"+"var curFrame,
startKF, endKF;"+"var newSel = new Array();"+"try {"+"startKF = 
eval("+startKF_as+"-1);"+"endKF = eval("+endKF_as+"-1);"+"var threshold = 
"+threshold_as+";"+"var minArea = "+minArea_as+";"+"var curveFit =
\""+curveFit_as+"\";"+"var corner = \""+corner_as+"\";"+"var errorMessage =  
\"\";"+"function theErrorMessage(msg){"+"if (errorMessage == \"\"){"+"errorMessage 
= msg;"+"}"+"else{"+"errorMessage += \"\\n\"+msg;"+"};"+"};"+"var thresholdErrorCondition =
threshold==\"\" || threshold &lt; 1 || threshold &gt; 500;"+"var minAreaErrorCondition =
minArea==\"\" || minArea &gt; 1000 || minArea &lt; 1 ;"+"if(startKF &lt;=-1 || endKF==-1 ||
thresholdErrorCondition || minAreaErrorCondition){"+"if(startKF == -1){"+"theErrorMessage
(\"Please enter a start frame.\");"+"};"+"if(startKF &lt; -1){"+"theErrorMessage
(\"The start frame you specified does not exist.\");"+"};"+"if(endKF == -1){"+"theErrorMessage
(\"Please enter an end frame.\");"+"};"+"if(endKF &lt; -1){"+"theErrorMessage 
(\"The end frame you specified does not exist.\");"+"};"+"if(thresholdErrorCondition)
{"+"theErrorMessage (\"Please enter a value for Threshold between 1 - 500.\");"+"};"+"if
( minAreaErrorCondition){"+"theErrorMessage (\"Please enter a value for Minimum Area between
1 - 1000.\");"+"};"+"alert(errorMessage);"+"}"+"else{"+"for (var k=0; k 
//注释;执行生成的JavaScript字符串.
  MMExecute(str);
  }
  //注释;在Button组件submit_btn上面侦听点击事件.
submit_btn.addEventListener("click", this);</PRE>
<P class=c align=left>　　三、实际用途</P>
<P class=c>　　严格来说，本实例只能算是一个半成品，不过实例所提供的思路很有启发性：怎么利用Numeric Stepper，怎么生成JavaScript字符串，怎么检查组件的值，等等，都很值得我们学习。这在制作网页表单，收集信息等场合中是非常有用的。</P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=361</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 10:35</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=360</guid>
			<title>Flash MX pro 2004的历史面板</title>
			<author>Calchas</author>
			<description><![CDATA[<P class=c>　　Flash MX Professional 2004新增了一个面板——History（历史）面板。History面板的作用是跟踪和记录你的操作步骤，以便把它们转换为可重用的命令。今天我们来仔细看看它的各种用途和使用方法。</P>
<P class=c><FONT color=#990000><FONT color=#000000>　　<STRONG>一、关于History面板</STRONG></FONT></FONT> </P>
<P class=c>　　 History面板显示你在活动文档中，自创建或打开该文档以来执行的操作步骤的列表。面板中的滑块开始时指向你最近执行的操作步骤。使用History面板，可以一次撤销或再次执行每一个操作步骤或多个操作步骤。可以把history面板中的操作步骤应用于同一对象或不同对象。History面板按步骤的执行顺序记录操作步骤，你不能改变操作步骤的排列顺序。</P>
<P class=c>　　如果你撤销一个操作步骤或一系列操作步骤，然后执行了新的操作，你再也不能重新执行被撤销的操作步骤，因为它们已经从该面板中消失。</P>
<P class=c>　　在默认情况下，History面板支持撤销100步操作。在Preferences（首选参数）面板，你可以修改该默认值，指定为2-9999之间的任何一个值。</P>
<P class=c>　　清除History面板可以删除当前文档的操作历史列表。清除该面板后，你就不能撤销被清除的操作步骤了。清除操作历史列表不会撤销操作步骤，它只是从当前文档的内存中清除这些操作步骤的记录。</P>
<P><SPAN class=c>　　关闭文档将清除它的操作历史。如果你想在关闭文档之后仍可使用那些</SPAN><SPAN class=f14>操</SPAN><SPAN class=c>作步骤，用Copy Steps（拷贝步骤）命令拷贝这些操作步骤，并保存这些操作步骤为命令即可。</SPAN></P>
<P class=c><FONT color=#990000><FONT color=#cccccc>　<STRONG><FONT color=#000000>　二、用History面板撤销操作步骤</FONT></STRONG></FONT></FONT> </P>
<P class=c>　　使用History面板，可以撤销最近的操作步骤，也可以撤销多个操作步骤。当你撤销一个操作步骤时，被撤销的步骤在History面板中以暗色显示。</P>
<P class=c>　　在History中撤销操作步骤的方法如下：</P>
<P class=c>　　1.选择Window&gt;Other Panels&gt;History（窗口&gt;其它面板&gt;历史），打开历史面板。</P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-1.png" width=675></P>
<P class=c><SPAN class=f14>　　2.拖曳面板中的滑块到某个操作步骤，或单击操作步骤的左边滑块的路径，滑块自动滚动到你单击的步骤，滑块滚过的所有操作步骤被撤销（暗色显示）。</SPAN></P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-2.png" width=675></P>
<P class=c><SPAN class=f14>　　提示：滚动到某个操作步骤（和选择连续操作步骤）与选择一个操作步骤不同。你必须单击步骤左边的滑块路径，才能滚动到某个操作步骤，且滑块会跟着移动到那个步骤的左边。选择一个步骤无须单击步骤左边的滑块路径，滑块也不跟着移动。下图是选择一个步骤的结果</SPAN>。</P>
<P class=c align=center><IMG height=263 src="http://www.flashempire.com/school/img4/yl031031-f1-3.png" width=218></P>
<P class=c align=left><BR>　　<STRONG>三、用History再次执行操作步骤</STRONG> </P>
<P class=c>　　使用History面板，可以再次执行各个步骤，也可以一次执行多个步骤。当使用该面板再次执行操作步骤时，被执行的步骤是面板中被选择的步骤（不需要滑块指向要执行的步骤）。可以把History面板中的操作步骤应用于文档中任何选定的对象。</P>
<P class=c>　　在History面板中再次执行操作步骤的方法如下：</P>
<P class=c>　　<STRONG>1.执行一个操作步骤</STRONG></P>
<P class=c>　　(1)在编辑区中选择要执行操作的对象。本例选择文本框中的文本。</P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-4.png" width=675></P>
<P class=c align=left>　　(2)在History面板中选择要再次执行的操作步骤，然后单击Replay（再次执行）按钮。选定的步骤被执行，它的拷贝也出现在History面板的步骤列表中。</P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-5.png" width=675></P>
<P class=c>　　本例在History面板中选择Fill Color操作，单击Replay按钮执行选定的操作，编辑区中选定的文本被设置为红色，Fill Color操作的拷贝也出现在History面板操作步骤列表的最下面。</P>
<P class=c><BR>　　<STRONG>2.执行连续的多个操作步骤</STRONG> </P>
<P class=c>　　(1)在编辑区中选择要执行操作的对象。本例选择编辑区中下面的文本框。</P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-6.png" width=675></P>
<P class=c>　　(2)在History面板中拖曳鼠标（勿拖曳滑块，在操作步骤的文本区拖曳即可），或选择第一个要执行的步骤，然后按住Shift键单击最后一个要执行的步骤（或反之），选取要再次执行的连续操作步骤。</P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-7.png" width=675></P>
<P class=c align=left><SPAN class=f14>　　(3)单击Replay（再次执行）按钮。选定的一系列操作步骤被执行，一个新的步骤—Replay Steps（再次执行操作步骤）出现在History面板的步骤列表中。</SPAN></P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-8.png" width=675></P>
<P class=c><BR>　　&nbsp;<STRONG>3.执行非连续的多个操作步骤</STRONG></P>
<P class=c>　　执行非连续的多个操作步骤的方法与执行连续的多个操作步骤的方法基本相同，只是在选择要执行的操作步骤时稍有不同，即：在选择多个步骤时，先选择一个步骤，然后按住Control键单击选择其它步骤。</P>
<P class=c align=center><IMG height=342 src="http://www.flashempire.com/school/img4/yl031031-f1-9.png" width=218></P>
<P class=c align=left><SPAN class=f14>　　其它操作步骤请参考上面的“执行连续的多个操作步骤”一节。</SPAN></P>
<P class=c align=left>　　<STRONG>四、创建和管理命令</STRONG> </P>
<P class=c>　　在History面板中，可以把选定的步骤保存为命令，以便重用这些操作步骤。在Manage Saved Commands（管理保存的命令）对话框中，你可以重命名命令或删除命令。</P>
<P class=c>　　创建命令的操作步骤如下：</P>
<P class=c>　　1.在History面板中选择一个或一组操作步骤。</P>
<P class=c align=center><IMG height=217 src="http://www.flashempire.com/school/img4/yl031031-f1-10.png" width=218></P>
<P class=f14 align=left>　<SPAN class=c>　2.从History面板选项菜单上选择Save As Command（存为命令）选项。</SPAN></P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-11.png" width=675></P>
<P class=c align=left>　　3.在弹出的Save As Command（存为命令）对话框中输入命令名，单击OK按钮。</P>
<P class=c align=center><IMG height=127 src="http://www.flashempire.com/school/img4/yl031031-f1-12.png" width=384></P>
<P class=c align=left>　　4.命令显示在Commands（命令）菜单中，要执行你保存的命令，从此菜单上选择即可</P>
<P class=c align=center><IMG height=565 src="http://www.flashempire.com/school/img4/yl031031-f1-13.png" width=675></P>
<P class=c align=left>　　提示：命令以JavaScrip文件（扩展名为.jsfl）保存在Flash MX 2004\<LANGUAGE />\First Run\Commands文件夹中。</P>
<P class=f14 align=left><SPAN class=c>　　5.要编辑所保存的命令，可从Commands菜单中选择Manage Saved Commands（管理保存的命令）选项，在弹出的对话框中选择一个命令，然后单击rename（换名）按钮，在弹出的Rename Commmand（给命令换名）对话框中输入新的命令名；或单击Delete（删除）命令，删除选定的命令；单击OK按钮</SPAN>。</P>
<P class=c align=center><IMG height=214 src="http://www.flashempire.com/school/img4/yl031031-f1-14.png" width=372></P>
<P class=c align=left>　　<STRONG>五、在文档之间拷贝和粘贴操作步骤</STRONG> </P>
<P class=c>　　每个打开的文档都有自己的操作步骤历史记录。使用History面板选项菜单上的Copy Steps（拷贝步骤）命令，可以从一个文档拷贝操作步骤，然后粘贴到另一个文档中。如果你把操作步骤拷贝到文本剪辑器，操作步骤将以JavaScript代码的形式粘贴到编辑器中。</P>
<P class=c>　　在文档之间拷贝和粘贴操作步骤的方法如下：</P>
<P class=c>　　1.在源文档的History面板中选择要拷贝的操作步骤。</P>
<P class=c align=center><IMG height=261 src="http://www.flashempire.com/school/img4/yl031031-f1-15.png" width=218></P>
<P class=f14 align=left>　<SPAN class=c>　2.在History面板选项菜单上选择Copy Steps命令</SPAN>。</P>
<P class=c align=center><IMG height=268 src="http://www.flashempire.com/school/img4/yl031031-f1-16.png" width=355 border=1></P>
<P class=c align=left>　　3.打开目标文档，选择Edit&gt;Paste in Center（编辑&gt;在中心粘贴），粘贴拷贝的操作步骤。当这些步骤被粘贴到目标文档的History面板时被执行。History面板显示这些步骤为一个操作步骤，称为Paste（粘贴）。</P>
<P class=c align=center><IMG height=261 src="http://www.flashempire.com/school/img4/yl031031-f1-17.png" width=218></P>
<P class=c align=left>　　提示：用拷贝粘贴方法重用操作步骤，只能在当前打开的文档之间进行。如果要在关闭文档之后仍可重用，必须把拷贝的操作步骤保存为命令。</P>
<P class=c align=left><FONT color=#990000><FONT color=#000000>　　<STRONG>六、撤销操作步骤时保存文档</STRONG></FONT></FONT> </P>
<P class=c>　　在默认情况下，如果使用History面板（或Edit&gt;Undo命令）撤销操作步骤，Flash文档的文件大小不会改变，甚至你删除了文档中的一个元素，文件大小也不会改变。例如，如果你在文档中导入了一个视频文件，然后撤销了导入，该文件的大小仍然包含该视频文件的大小。这是因为，在你用撤销操作命令删除了一个元素时，Flash仍然要保留该元素，以备你可能要用Redo命令恢复被删除的元素。你可以使用File&gt;Save and Compact（保存和压缩）命令，从文档中永久删除一个元素，以减小文件大小。</P>
<P class=c>　　使用历史面板，可以一次快速执行多步操作，还可以把一些操作步骤保存为命令反复使用，这无疑可以提高我们的工作效率。大家试试吧！</P>
<P class=c align=right>（完）</P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=360</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 10:32</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=359</guid>
			<title>Flash MX 2004新特性实例学习六</title>
			<author>Calchas</author>
			<description><![CDATA[<P class=c><FONT color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;实例七 &nbsp;&nbsp;&nbsp;&nbsp;Text Enhancements</FONT></P>
<P class=c>　　一、涉及特性<BR><BR>　　在实例中，主要涉及在Flash MX 2004中引用和显示外部的css文件和html文件。这些都是在Flash MX 2004中才有的新特性，应用也非常方便。本实例在Flash MX 2004中的操作非常简单，不过这正从侧面反映了它的功能强大。<BR><BR>　　二、制作过程<BR><BR>　　1、建立一个文件，命名为sample.css。其内容如下：</P><PRE class="codebox cg w30">headline {
  font-family: Arial,Helvetica,sans-serif;
  font-size: 16px;
  font-weight: bold;
  display: block;
}
subheadline {
  font-family: Arial,Helvetica,sans-serif;
  font-size: 13px;
  font-weight: bold;
  display: block;
}
mainBody {
  font-family: Arial,Helvetica,sans-serif;
  font-size: 10px;
  display: block;
}
biline {
  font-family: Arial,Helvetica,sans-serif;
  font-size: 11px;
  font-style: italic;
  display: inline;
}
A {
  font-family: Arial,Helvetica,sans-serif;
  color:cccccc;
  font-size: 10px;
  display: inline;
  text-decoration:underline;
}</PRE>
<P class=c>　　上面的css文件中，中括号里面的是对应的属性。比如font-family是字符集，font-size是字体大小，display是字体的显示方式，等等。只要有简单的网页制作知识就应该可以看懂的。</P>
<P class=c>　　2、新建一个文件，命名为sample.html，其内容如下：</P><PRE class="codebox cb w90">&lt;body&gt;
&lt;headline&gt;Giant Sea Lion Spotted&lt;/headline&gt;
&lt;subheadline&gt;Citizens scared, amazed&lt;/subheadline&gt;
&lt;biline&gt;Today - Our City &lt;/biline&gt;
&lt;mainBody&gt;A giant sea lion was spotted today rampaging around the city's main square,
scaring thousands of innocent people just out for a daily stroll in the beautiful downtown district.
&lt;img align='right' src='sample.jpg'/&gt;No 
injuries were reported after the animal's two-hour assault of the shopping 
district famous for it's sea lion purses and shoes, also known as the "sea 
lion district". Witnesses said the creature came out of the ocean near 
the Burger King at 42nd and 1st Avenue, startling many and stalling traffic. 
"The animal caused nearly four million dollars of damage to the 
neighborhood," said Joseph Valente, owner of "Sea Lions R' Us" 
at 43rd and 2nd. Onlookers to the scene said that the sea lion appeared 
ornery, but otherwise in good spirits. 
Officials are uncertain as to when, if ever, the sea lion may return.
&lt;A HREF="http://www.macromedia.com"&gt;Click here for more.&lt;/A&gt; 
&lt;/mainBody&gt;
&lt;/body&gt; </PRE>
<P class=c>　　这个文件的内容是应用了前面所创建的css格式的html文件。（严格来说，此文件更像是一个xml文件。）</P>
<P class=c>　　3、将一个名为sample.jpg的图片放到跟第一、二步所创建的文件的同一目录中。</P>
<P class=c>　　4、新建一个Flash MX 2004的文件，保存在跟前面所创建的文件所在的目录中。</P>
<P class=c>　　5、用文本工具在场景中拉一个文本输入框，命名为content。在属性面板上设置如1所示。</P>
<P><SPAN class=c>　　6、在TimeLine中新建一个图层，命名为Action，在此层的Action面板上面增加如下语句：</SPAN> </P><PRE class="codebox cy w60">/* Copyright 2003 Macromedia, Inc. All rights reserved.
The following is Sample Code and is subject to all restrictions 
on such code as contained in the End User License Agreement 
accompanying this product.
*/
var ss:TextField.StyleSheet = new TextField.StyleSheet(); 
//注释1;定义一个变量ss，它的类型为TextField.StyleSheet.
ss.load("sample.css"); 
//注释2;读取sample.css文件的内容到ss中。这里要注意所有文件的保存路径要一致.
content.styleSheet = ss;
//注释3;设置文本框content的几个属性.
content.multiline= true;
content.wordWrap = true;
content.html = true;
story = new XML(); 
//注释4;创建一个xml对象.
story.ignoreWhite = true;
story.load("sample.html"); 
//注释5;读入sample.html文件的内容到story中.
story.onLoad = function () { 
//注释6;设置story的onLoad函数，函数的内容为设置content的htmlText为story
content.htmlText = story;
}</PRE>
<P class=c>　　三、实际用途</P>
<P class=c>　　从实例的制作过程中可以看到，以前在Flash中一行一行地调整文字显示效果的时候再也不会出现。Flash MX 2004中操作HTML文件非常灵活，修改显示效果也很方便，只要改一下相应的文件内容就可以了。这在用Flash来做比较多的文字显示处理的场景中非常有用。</P>
<P class=c align=right>（完）</P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=359</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 10:32</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=358</guid>
			<title>Flash MX Pro 2004新模板应用(二)</title>
			<author>Calchas</author>
			<description><![CDATA[<P class=c align=left><B><FONT color=#000000>　<SPAN class=c>　一、应用视频模板</SPAN></FONT></B></P>
<P class=c>　　Flash MX 2004没有视频模板，只有Flash MX Professional 2004才提供视频模板。使用视频模板，你可以在自己的Flash工程中使用和部署视频，播放外部Flash视频文件（.flv），可以轻松创建视频展示和可选带宽的用户界面。</P>
<P>　<SPAN class=c>　<STRONG>1.Bandwidth Selection（带宽选择）模板</STRONG><BR><BR>　　使用Bandwidth Selection模板可以创建带宽选择界面，让设计人员能够为自己开发的应用设置不同的连接速度。让终端用户能够在动画播放期间，根据需要选择不同的带宽。用户选定连接速度之后，媒体播放组件就按指定的速度播放选定的视频。</SPAN></P>
<P class=c>　　请先下载本例的<A href="http://www.flashempire.com/school/img4/video1.fla">源文件</A>、<A href="http://www.flashempire.com/school/img4/video1.swf">动画文件</A>和<A href="http://www.flashempire.com/school/img4/tank_hi.flv">辅助文件</A>，在Flash 7播放器中播放动画文件。因动画文件较大，为方便大家阅读，没有将其嵌在文章里。</P>
<P class=c>　　使用Bandwidth Selection模板的操作步骤如下：</P>
<P class=c>　　(1)选择File&gt;New（文件&gt;新建），或从开始页的Create from Template栏中选择Video（视频），打开New from Template（用模板新建）对话框。选中Bandwidth Select（带宽选择）模板，单击确定按钮。</P>
<P class=c align=center><IMG height=391 src="http://www.flashempire.com/school/img4/yl031029-f1-2.png" width=581></P>
<P class=c align=left>　　(2)编辑区中显示Select（选择）窗体，其中包含了3个带宽选择单选钮。</P>
<P class=c align=center><IMG height=442 src="http://www.flashempire.com/school/img4/yl031029-f1-3.png" width=498></P>
<P class=c align=left>　　(3)选择窗体中的文本或标签，把它改为中文。方法是：选择要修改的文本或标签，然后在属性检查器中修改text(文本)或label（标签）属性的值。</P>
<P class=c align=center><IMG height=502 src="http://www.flashempire.com/school/img4/yl031029-f1-4.png" width=630></P>
<P class=c align=left>　　(4)设置视频内容的URL</P>
<P class=c>　　Flash MX 2004的媒体播放组件可以载入和播放外部Flash视频文件（.flv），不要求把视频文件嵌入SWF文件中。媒体播放组件要载入外部视频文件，必须知道正确的URL。带宽选择单选钮的data（数据）属性的值被设置为一个字符串（如低带宽单选钮的data属性的值为"_lo"）。当用户选择了“低带宽”单选钮时，该字符串（"_lo"）就会被添加到基础字符串的后面，一起构成正确的URL。例如，如果用户选择“低带宽”单选钮，基础字符串是tank，则被载入的文件就是tank_lo.flv。要修改基础字符串，就要修改Select窗体的动作脚本。</P>
<P class=c>　　设置视频内容的URL的操作步骤是：在Select窗体被选中的情况下，展开时间轴面板。选择Actions（动作）层的第1帧。把其中的语句：</P><PRE class="codebox cy w30">var video_base:String = "test"</PRE>
<P class=c align=left>　　改为：</P><PRE class="codebox cy w30">var video_base:String = "tank"</PRE>
<P class=c align=center><IMG height=502 src="http://www.flashempire.com/school/img4/yl031029-f1-5.png" width=630></P>
<P class=c>　<SPAN class=c>　提示：在与SWF文件相同的目录中，你应该预先保存有不同连接速度的视频文件（如tank_hi.flv、tank_med.flv和tank_lo.flv）。</SPAN></P>
<P><SPAN class=c>　　(5)选择Control&gt;Test Movie（控制&gt;测试动画），进入动画测试环境。选择高带宽单选钮，Flash播放器就会载入tank_hi.flv播放</SPAN>。</P>
<P align=center><IMG height=321 src="http://www.flashempire.com/school/img4/yl031029-f1-6.png" width=315></P>
<P align=left><SPAN class=c>　　带宽选择模板的应用操作比较简单，但要事先录制好不同带宽的FLV文件则显得比较麻烦。此外，用本模板生成的动画在Flash 7播放器中播放正常，把SWF文件插入网页后，在浏览器中不能载入视频文件，不知是笔者有bug，还是Flash播放器插件与浏览器的兼容性问题。</SPAN><BR></P>
<P class=c align=right>（完）</P>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=358</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 10:31</pubDate>
		</item>
		<item>
			<guid>http://Lixf.net/?action=show&amp;id=357</guid>
			<title>Flash MX Pro 2004新模板应用(一)</title>
			<author>Calchas</author>
			<description><![CDATA[<DIV id=tutorContentBox>
<P>&nbsp;&nbsp;&nbsp;&nbsp;打开Flash MX Professional 2004，从开始页右边的Create from Template（用模板创建）栏中可以看到，Flash MX Professional 2004的模板类型列表（图1）。或者从菜单中选择File－new，从弹出面板中选择New from Template，也可以看到Flash MX Professional 2004的模板类型列表（图2）。</P>
<P class=c>　　这些模板类型包括：</P>
<UL>
<LI class=c>Advertising（广告） 
<LI class=c>Form Application（窗体应用） 
<LI class=c>Mobile Devices（移动设备） 
<LI class=c>Photo SlideShows（照片幻灯演示） 
<LI class=c>Presentations（演示文稿） 
<LI class=c>Quiz（测验） 
<LI class=c>Slide Presentations（幻灯片） 
<LI class=c>Vedio（视频） </LI></UL>
<P class=c align=center><IMG height=360 src="http://www.flashempire.com/school/img4/yl031029-f1-1.gif" width=554></P>
<P class=c align=center>图1</P>
<P class=c align=center><IMG height=391 src="http://www.flashempire.com/school/img4/yl031029-f1-1-2.gif" width=559></P>
<P class=c align=center>图2</P>
<P class=c>　　与Flash MX对比可以发现，Flash MX Professional 2004取消了一些模板、更新了一些原有的模板，还新增了一些模板。新增的模板有Form Application（窗体应用）、Slide Presentations（幻灯片）和Vedio（视频）三类。</P>
<P class=c>　　下面介绍一些新增模板（包括一些变化较大的更新模板）的使用方法，大家不妨动动手，亲身体验它们的简便和快捷。为方便大家阅读和上手，文章的每一部分都配有大量图文介绍、具体的实例以及实例制作过程。</P>
<P class=c>　　<SPAN class=c><FONT color=#000000><B>一、应用视频(Vedio)模板</B> <BR><BR>　　Flash MX 2004没有视频模板，只有Flash MX Professional 2004才提供视频模板。使用视频模板，你可以在自己的Flash工程中使用和部署视频，播放外部Flash视频文件（.flv），可以轻松创建视频展示和可选带宽的用户界面。 <BR><BR>　　1、Bandwidth Selection（带宽选择）模板使用<BR><BR>　　使用这个模板可以创建带宽选择界面，让设计人员能够为自己开发的应用设置不同的连接速度，终端用户能在动画播放期间，根据需要选择不同的带宽 <BR></FONT><BR>　　2、Video Presentation（视频展示）模板使用<BR><BR>　　该模板使用幻灯片、媒体组件和行为来创建自运行展示，特别适用于创建网上自动演示。 <B><BR></B><BR>　　<B>二、应用屏幕展示(Slide Presentations)模板</B> <BR><BR>　　使用屏幕展示模板，可以创建专业级的幻灯片展示。可以添加新的幻灯片，然后给这些幻灯片添加文本、图像、媒体和组件等等。还可以使用行为面板在幻灯片之间添加转场效果。幻灯片有内建的导航系统，可以使用键盘的箭头键导航，也可以用鼠标单击幻灯片中的按钮导航。 <BR><BR>　　<B>三、应用移动设备(Mobile Devices)模板</B><BR><BR>　　现在，Flash内容可以在多种浏览器、平台和移动电话中浏览。用Flash MX Professional 2004可以创作高质量的动画、游戏、富媒体用户界面，以及电子商务解决方案。此外，Flash文件小巧，特别适合于无线网络传输。使用移动设备模板，可以为当今流行的移动设备创作内容。 <BR><BR>　　<B>四、使用窗体应用(Form Application)模板</B><BR><BR>　　1、Query-Error-Response（查询-错误-回应）模板<BR><BR>　　Query-Error-Response模板帮助你创建能够执行查询任务的应用。这种应用能对远程数据源进行简单查询，然后根据查询结果，在应答窗体中显示查询结果，或在出错窗体中显示出错信息。在Web服务中执行查询时这种应用很有用。 <BR><BR>　　2、Windowed Application（窗口式应用）模板<BR><BR>　　 Windowed Application（窗口式应用）模板帮助你创建由多个小窗口组成的窗口式应用。这些小窗口是可以拖动的。获得焦点的小窗口位于最顶层。每个小窗口包含不同的内容。</SPAN> </P>
<P class=c align=right>（完） </P></DIV>]]></description>
			<link>http://Lixf.net/?action=show&amp;id=357</link>
			<category domain="http://Lixf.net/?cid=15">FLASH</category>
			<pubDate>2005-12-01 10:31</pubDate>
		</item>
	</channel>
</rss>
