




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
FlashAS3.0打造漂亮的水汶實例教程在這個教程中,我們將用到置換圖濾鏡(DisplacementMapFilter)和BitmapData類的的雜點功能(perlinNoise),這兩個家伙常常給我們帶一些令人興奮的效果,它們今天的合作為我們創(chuàng)造了一個漂亮的的水汶,看看下面的動畫,應該還不錯吧?,F(xiàn)在我開始來構建這個漂亮的水汶:即然是水汶,我想首先要找一張含水的圖片吧,百度一下吧,河道,湖泊,水池,你喜歡就行。1.新建一AS3.0文檔,將幀頻設為30,將你剛百度到的圖片導入到庫中,點右鍵,在屬性面板中將“使用JPEG導入品質”前的鉤鉤去掉,這樣做圖片的體積就會大大地減小哦。2.新建一個影片剪輯元件,將圖片拖到舞臺上,設置圖片的大小,你想設多大呢?反正我是按默認的550x400.圖片在大小與文檔大小一樣大哈。點擊對齊面板,相對于舞臺居中對齊。3.回到主場景,將MC拖到舞臺上,居中放置,為它設置一個實例名稱,我用的是”pic”圖層上鎖。4.新插入一圖層,將圖片(注意是圖片不是MC哈),拖到舞臺上,打開對齊面板,寬高匹配,居中對齊。現(xiàn)在第1,2層的圖像是完全重合的,請確認是這樣的。選擇圖片,點擊修改>分離,將水面部分選出,刪除??梢詫⒌?層隱藏,看看刪除后的效果。如下圖:5.新建一層用來寫代碼,打開動作面板,輸入下列代碼:1.varbmp:BitmapData=newBitmapData(550,400);
2.varzh:DisplacementMapFilter=newDisplacementMapFilter(bmp,newPoint(0,0),1,2,10,600);
3.varp1:Point=newPoint();
4.varp2:Point=newPoint();
5.varzdxg:Array=[p1,p2];
6.addEventListener(Event.ENTER_FRAME,ld);
7.functionld(e:Event):void{
8.zdxg[0].x+=0.2;
9.zdxg[1].y+=0.1;
10.bmp.perlinNoise(168,5,2,4,true,true,2,true,zdxg);
11.pic.filters=[zh];
12.}OK,測試影片,一個漂亮的水汶效果立即出現(xiàn)在你的眼前。代碼分析:首先聲明了一個與圖片一樣大的BitmapData類實例bmp,用來作為置換圖濾鏡的參數(shù)。
varbmp:BitmapData=newBitmapData(550,400);
然后聲明一個置換圖濾鏡zh,將bmp作為參數(shù)。
varzh:DisplacementMapFilter=newDisplacementMapFilter(bmp,newPoint(0,0),1,2,10,600);
接下來聲明了兩個點,并將這兩個點放到到一個叫zdxg的數(shù)組中,這個數(shù)組將用于bmp產生雜點的參數(shù)。
varp1:Point=newPoint();
varp2:Point=newPoint();
varzdxg:Array=[p1,p2];
然后,在ENTER_FRAME事件中調用ld函數(shù)。
addEventListener(Event.ENTER_FRAME,ld);
ld函數(shù),動態(tài)改變兩個點的位置,然后使bmp應用雜點功能,在每一幀的間隔產生不同的雜點效果,使置換濾鏡效果產生變化,最后讓影片剪輯pic,應用濾鏡,實現(xiàn)水汶效果。
functionld(e:Event):void{
zdxg[0].x+=0.2;
zdxg[1].y+=0.1;
bmp.perlinNoise(168,5,2,4,true,true,2,true,zdxg);
pic.filters=[zh];
}利用Flash的AS3.0代碼制作3D旋轉動畫效果效果演示:〖本教程著重于代碼的編寫,版本AS3.0。圖形元件的制作不作講解,請參看有關教程?!?、新建Flash文檔,創(chuàng)建5個圖形,(或導入5張圖片到庫中)。2、創(chuàng)建一個影片剪輯,1層為圖片層2層為代碼層。在1層把5張圖片分別放在5幀中,在代碼層輸入stop();如圖:3、Ctrl+L打開庫,右鍵單擊影片剪輯實例做鏈接,類名為:IconMenu如圖:4、返回場景1,圖層1為背景層,圖層2為代碼層。在圖層1導入背景圖片。圖層2輸入代碼:1.include"Math2.as"
2.//圖片容器
3.varmenu:Sprite=newSprite();
4.//使圖標移動
5.menu.x=300;
6.menu.y=200;
7.//注冊事件偵聽器
8.menu.addEventListener(Event.ENTER_FRAME,moveMenu);
9.this.addChild(menu);
10.//橢圓在x和y軸上的截距
11.vardisx:Number=200;
12.vardisy:Number=10;
13.//旋轉速度
14.varspeed:Number=0;
15.initMenu(5);
16.functioninitMenu(n:int){
17.for(vari:int;i<n;i++){
18.varmc:MovieClip=newIconMenu();
19.//縮小圖標
20.mc.scaleX=mc.scaleY=.5;
21.menu.addChild(mc);
22.}
23.}
24.//事件偵聽器函數(shù)
25.functionmoveMenu(e:Event):void{
26.//獲取圖標數(shù)
27.variconCount:int=menu.numChildren;
28.//定義數(shù)組
29.vardepthArray:Array=newArray();
30.//把360度平分
31.varangle:Number=360/iconCount;
32.for(varz:int;z<iconCount;z++){
33.//根據深度獲取圖標
34.varmc:MovieClip=menu.getChildAt(z);
35.//跳轉到不同幀,來顯示不同的圖標
36.mc.gotoAndStop(z+1);
37.//設置圖標的位置
38.mc.x=cosD(speed+angle*z)*disx;
39.mc.y=sinD(speed+angle*z)*disy;
40.setProp(mc,"alpha");
41.setProp(mc,"scaleX",.2,.7);
42.setProp(mc,"scaleY",.2,.7);
43.//保存圖標到數(shù)組
44.depthArray[z]=mc;
45.}
46.//重新設置圖標的深度
47.arrange(depthArray);
48.speed+=2;
49.}
50.functionarrange(depthArray:Array):void{
51.//按照y坐標排序
52.depthArray.sortOn("y",Array.NUMERIC);
53.vari:int=depthArray.length;
54.while(i--){
55.menu.setChildIndex(depthArray[i],i);
56.}
57.}
58.functionsetProp(mc:MovieClip,prop:String,n1:Number=.5,n2:Number=1):void{
59.mc[prop]=((mc.y+2*disy)/disy-1)/2*(n2-n1)+n1;
60.}5、新建.as文檔,保存名為:Math2.as(這個文檔是進行三角函數(shù)的計算)輸入代碼:1.//角度轉弧度
2.functionangleToRadian(angle:Number):Number
3.{
4.returnangle*(Math.PI/180);
5.}
6.//弧度轉角度
7.functionradianToAngle(radian:Number):Number
8.{
9.returnradian*(180/Math.PI);
10.}
11.//計算正弦值
12.functionsinD(angle:Number):Number
13.{
14.returnMath.sin(angleToRadian(angle));
15.}
16.//計算余弦值
17.functioncosD(angle:Number):Number
18.{
19.returnMath.cos(angleToRadian(angle));
20.}
21.//計算反正切
22.functionatan2D(y:Number,x:Number):Number
23.{
24.returnradianToAngle(Math.atan2(y,x));
25.}
復制代碼把fla文檔與Math2.as文檔保存在同一目錄下,進行測試。[AS3編程教學]從庫中加載聲音并控制播放概述:Flash交互作品對于聲音的控制是比較靈活和常用的,接下去筆者將抽空對聲音控制寫一批由簡至難的教程,而本節(jié)教程詳細講述如何從庫里加載一個聲音文件到舞臺上并控制其播放。首先,我們打開FlashCS5,按下Ctrl+N,新建一個FlashAS3文檔,如下圖所示:其次,我們需要導入一個mp3格式的音樂文件到庫中??梢詧?zhí)行“文件/導入/導入到庫”來操作,也可以直接從文件夾拖動到flash庫里,如下圖所示我們導入了聲音文件:要用程序將聲音加載到舞臺控制播放,那么就需要給聲音文件一個綁定的類名,所以我們在聲音文件上單擊右鍵/屬性,然后點擊ActionScript,勾選“為ActionScript導出和第一幀導出”,給聲音一個鏈接類名:TestSound:選擇主時間軸第一幀,按下F9,寫以下代碼,然后按下Ctrl+Enter,你便能聽到音樂播放了:
importflash.media.Sound;
varmySound:Sound=newTestSound()asSound;
mySound.play();
播放函數(shù)有一個開始播放時間和重復播放次數(shù)的參數(shù),我們讓聲音從第三秒開始播放,并且連續(xù)播放三遍需要這樣寫:
importflash.media.Sound;
varmySound:Sound=newTestSound()asSound;
mySound.play(3000,3);還有一個就是循環(huán)播放,當聲音播放結束后自動開始再次播放,重復無數(shù)遍,此時就需要增加一個事件監(jiān)聽,當播放結束后再次開始:
importflash.media.Sound;
varmySound:Sound=newTestSound()asSound;
varsndChanel:SoundChannel=mySound.play();
sndChanel.addEventListener(Event.SOUND_COMPLETE,rePlaySound);functionrePlaySound(e:Event):void{
mySound.play();}如果聲音文件導入時提示“一個或多個文件未導入”,一般是mp3文件過大或者格式不兼容,你下載一個“全能音頻轉換通”,另存為一下就好了。[AS3.0編程教學]最全的聲音控制方法網上做flash音樂播放器的人不少,這個作品主要是對聲音的外部讀取,然后保存,然后控制播放,暫停,停止等操作,今天這個作品就是向大家展示這些操作的方法。首先我們新建一個文件,在舞臺上擺出下面這些按鈕,我們今天對這個聲音文件的操縱就如按鈕所示:動手之前我們按下Ctrl+Shift+F12,打開ActionScript設置,將“自動申明舞臺對象”打鉤取消,我們將每個對象自己用Public聲明,這樣做的好處是開發(fā)時每個元件的屬性方便引用和提醒。我們新建一個文檔類,首先聲明舞臺上這些按鈕,并定義聲音變量:testSound,控制變量testChannel,testTrans,testPosition。publicvarbtnPlay:SimpleButton;publicvarbtnPause:SimpleButton;publicvarbtnStop:SimpleButton;publicvarbtnQuick:SimpleButton;publicvarbtnVocUp:SimpleButton;publicvarbtnVocDown:SimpleButton;publicvarbtnPanUp:SimpleButton;publicvarbtnPanDown:SimpleButton;privatevartestSound:Sound;privatevartestChannel:SoundChannel;privatevartestTrans:SoundTransform;privatevartestPosition:Number=0;首先用下面代碼將一首叫做“test.mp3"的音樂加載到舞臺。publicfunctionTestSoundMain(){testSound=newSound();testChannel=newSoundChannel();testTrans=newSoundTransform();testSound.load(newURLRequest("test.mp3"));testSound.addEventListener(Event.COMPLETE,soundLoadOver);}privatefunctionsoundLoadOver(e:Event):void
{testSound.removeEventListener(Event.COMPLETE,soundLoadOver);soudLoad=true;}播放按鈕功能??刂埔魳凡シ诺陌粹o,單擊后音樂開始播放,并記錄音樂的SoundChannel屬性。為了防止連擊,我們定義一個isSoundPlay布爾變量判斷音樂是否在播放中。//播放按鈕功能privatefunctionplayBtnEvent():void{btnPlay.addEventListener(MouseEvent.CLICK,soundPlay);}privatefunctionsoundPlay(e:MouseEvent):void
{if(isSoundPlay)return;isSoundPlay=true;testChannel=testSound.play(testPosition);}暫停按鈕功能,該按鈕讓音樂暫停掉,為了能繼續(xù)播放,我們需要記錄下此時testChannel的位置,然后播放按鈕單擊時可以繼續(xù)播放//暫停按鈕功能privatefunctionpauseBtnEvent():void{btnPause.addEventListener(MouseEvent.CLICK,soudPause);}privatefunctionsoudPause(e:MouseEvent):void
{if(!isSoundPlay)return;isSoundPlay=false;testPosition=testChannel.position;testChannel.stop();}停止按鈕功能,單擊后音樂停止播放,記錄位置歸0.//停止按鈕功能privatefunctionstopBtnEvent():void{btnStop.addEventListener(MouseEvent.CLICK,soundStop);}privatefunctionsoundStop(e:MouseEvent):void
{isSoundPlay=false;testPosition=0testChannel.stop();}快進聲音。單擊該按鈕時,我們讓聲音從當前位置向前播放500毫秒,也就是快進半秒。//快進按鈕功能privatefunctionqucikBtnEvent():void{btnQuick.addEventListener(MouseEvent.CLICK,soudQuickPlay);}privatefunctionsoudQuickPlay(e:MouseEvent):void
{if(!isSoundPlay)return;testPosition=testChannel.position;testChannel.stop();testChannel=testSound.play(testPosition+500);}設定聲音的音量增加??刂埔袅烤托枰猻oundTransform對象了,它其實是testChanel的soundTransform屬性而已,通過它來控制音量。//音量增加privatefunctionvolumeUpBtnEvent():void{
btnVocUp.addEventListener(MouseEvent.CLICK,upSoudVoc);}privatefunctionupSoudVoc(e:MouseEvent):void
{if(!isSoundPlay)return;testTrans=testChannel.soundTransform;varaddedVoc:Number=testTrans.volume>1?1:(testTrans.volume+
0.05);testTrans.volume=addedVoc;testChannel.soundTransform=testTrans;}
設定聲音的音量減小。//音量減小privatefunctionvolumeDownBtnEvent():void{
btnVocDown.addEventListener(MouseEvent.CLICK,downSoundVoc);}privatefunctiondownSoundVoc(e:MouseEvent):void
{if(!isSoundPlay)return;testTrans=testChannel.soundTransform;vardownVoc:Number=testTrans.volume<0?0:(testTrans.volume-
0.05);testTrans.volume=downVoc;testChannel.soundTransform=testTrans;}
設定聲音的平衡度向右,點擊此按鈕聲音的平衡性會右移,直到變成右聲道。//平衡向右移動privatefunctionpanRightBtnEvent():void{
btnPanUp.addEventListener(MouseEvent.CLICK,upSoundPan);}privatefunctionupSoundPan(e:MouseEvent):void
{if(!isSoundPlay)return;testTrans=testChannel.soundTransform;varaddedPan:Number=testTrans.pan>1?1:(testTrans.pan+0.05);testTrans.pan=addedPan;testChannel.soundTransform=testTrans;}
設定聲音的平衡度向左,點擊此按鈕聲音的平衡性會左移,直到變成左聲道。//平衡向左移動privatefunctionpanLeftBtnEvent():void{
btnPanDown.addEventListener(MouseEvent.CLICK,downSoundPan);}privatefunctiondownSoundPan(e:MouseEvent):void
{if(!isSoundPlay)return;testTrans=testChannel.soundTransform;vardownPan:Number=testTrans.pan<0?0:(testTrans.pan-0.05);testTrans.pan=downPan;testChannel.soundTransform=testTrans;}
最后別忘了所有你定義的函數(shù)都要寫到音樂加載完成的那個函數(shù)里執(zhí)行,或者構造函數(shù)也可以。就像下面這樣子://加載音樂并控制播放privatefunctionsoundLoadOver(e:Event):void
{testSound.removeEventListener(Event.COMPLETE,soundLoadOver);soudLoad=true;playBtnEvent();pauseBtnEvent();stopBtnEvent();qucikBtnEvent();volumeUpBtnEvent();volumeDownBtnEvent();panRightBtnEvent();panLeftBtnEvent();}所有這些一個個代碼合并到一起,就是我們主的文檔類。制作完畢!我沒有寫聲音加載過程和加載錯誤的監(jiān)聽,如果你的操作沒有聲音,那一定是你的聲音文件有問題,換個文件試試;還有留意下方的報錯提示。其實SoundTransform類還有四個讀寫屬性:leftToLeft,leftToRight,rightToLeft,rightToRight,用來設置左右輸入在左右揚聲器的音量,有興趣的同學可以細微研究:)AS3編程教學]利用xml加載并控制聲音本教材旨在講授兩個知識點,一個是對xml的讀取和解析,另一個是對加載外部音效的簡單播放控制首先我們新建一個舞臺,在舞臺上創(chuàng)建三個按鈕:加載btnLoad,播放btnPlay,暫停btnPause。,加載按鈕用來加載xml和音樂文件,播放用來繼續(xù)播放聲音,暫停用來暫停聲音,如下圖所示:首先我們要寫配置聲音資源的xml文件,因為要加一個音樂,所以xml非常簡單。
<?xmlversion="1.0"encoding="utf-8"?>
<data>
<sndpath="mSound.mp3">
</snd>
</data>
按照順序,我們先寫“加載”按鈕上的函數(shù)功能。加載按鈕主要完成兩步工作,第一是讀取sndData.xml里面的音樂路徑,第二是通過讀取到得路徑把音樂加載進來并播放。因此我們要定義一個聲音類變量。
varloadSound:Sound=newSound();
//-------------------------------
addMouseEvent();
functionaddMouseEvent():void{
btnLoad.addEventListener(MouseEvent.CLICK,loadSoundData);
}
functionloadSoundData(e:MouseEvent):void{
varxLoader:URLLoader=newURLLoader();
xLoader.addEventListener(Event.COMPLETE,completeLoadData);
xLoader.load(newURLRequest("sndData.xml"));
}
functioncompleteLoadData(e:Event):void{
varmXML:XML=XML(e.target.data);
varsndPath:String=String(mXML.snd.@path);
trace(sndPath);
loadSound.load(newURLRequest(sndPath));
loadSound.addEventListener(Event.COMPLETE,completeLoadSound);
}
functioncompleteLoadSound(e:Event):void{
loadSound.play();
}單擊“加載”按鈕,當這段代碼被執(zhí)行時,聲音便會被加載進來并且自動播放!接下來寫聲音的暫停和播放按鈕。在AS3里,為了控制聲音播放暫停,我們需要另外定義一個SoundChannel對象和一個記錄聲音播放位置的變量,來達到這一目的。
varloadSound:Sound=newSound();
varsndChannel:SoundChannel;
varsndPostion:int;
//-------------------------------
addMouseEvent();
functionaddMouseEvent():void{
btnLoad.addEventListener(MouseEvent.CLICK,loadSoundData);
btnPlay.addEventListener(MouseEvent.CLICK,continuPlaySnd);
btnPause.addEventListener(MouseEvent.CLICK,pauseSnd);
}
//播放暫停
functioncontinuPlaySnd(e:MouseEvent):void{
sndChannel=loadSound.play(sndPostion);
}
functionpauseSnd(e:MouseEvent):void{
sndPostion=sndChannel.position;
sndChannel.stop();
}經過測試,似乎功能已經滿足,但是也有問題,當聲音在播放時,點擊“播放按鈕”,聲音會二次播放重疊,其實,當聲音正在播放的時候,播放不需要處理,只有暫停的時候才讓它繼續(xù)播放;同理,聲音只有在播放的時候,暫停按鈕才能起作用。所以我們定義需要一個是否播放的狀態(tài)布爾變量,當播放時為true,暫停時為false,在按鈕單擊時加以判斷:
varisSoundPlay:Boolean=false;
//播放暫停
functioncontinuPlaySnd(e:MouseEvent):void{
if(isSoundPlay)return;
isSoundPlay=true;
sndChannel=loadSound.play(sndPostion);
}
functionpauseSnd(e:MouseEvent):void{
if(!isSoundPlay)return;
isSoundPlay=false;
sndPostion=sndChannel.position;
sndChannel.stop();
}此時測試音樂,一切都正常,但是舞臺上空白了很多,我們加一個波普效果,隨著音樂的播放暫停同步運動,這樣很明顯地看到你對音樂的控制了,如圖所示我們做一個簡單的波形動畫:給波形動畫命名為mcWave,然后修改控制函數(shù)。
//播放暫停
functioncontinuPlaySnd(e:MouseEvent):void{
if(isSoundPlay)return;
isSoundPlay=true;
sndChannel=loadSound.play(sndPostion);
mcWave.play();
}
functionpauseSnd(e:MouseEvent):void{
if(!isSoundPlay)return;
isSoundPlay=false;
sndPostion=sndChannel.position;
sndChannel.stop();
mcWave.stop();
}此時再測試,就會有一個波形直觀地顯示音樂的播放暫停了。此時源文件目錄如下:
完整代碼如下:
varloadSound:Sound=newSound();
varsndChannel:SoundChannel;
varsndPostion:int;
varisSoundPlay:Boolean=false;
mcWave.stop();
//-------------------------------
addMouseEvent();
functionaddMouseEvent():void
{
btnLoad.addEventListener(MouseEvent.CLICK,loadSoundData);
btnPlay.addEventListener(MouseEvent.CLICK,continuPlaySnd);
btnPause.addEventListener(MouseEvent.CLICK,pauseSnd);
}
//加載音樂
functionloadSoundData(e:MouseEvent):void
{
varxLoader:URLLoader=newURLLoader();
xLoader.addEventListener(Event.COMPLETE,completeLoadData);
xLoader.load(newURLRequest("sndData.xml"));
}
functioncompleteLoadData(e:Event):void
{
varmXML:XML=XML(e.target.data);
varsndPath:String=String(mXML.snd.@path);
loadSound.load(newURLRequest(sndPath));
loadSound.addEventListener(Event.COMPLETE,completeLoadSound);
}
functioncompleteLoadSound(e:Event):void{
sndChannel=loadSound.play();
isSoundPlay=true
mcWave.play();
}
//播放暫停
functioncontinuPlaySnd(e:MouseEvent):void{
if(isSoundPlay)return;
isSoundPlay=true;
sndChannel=loadSound.play(sndPostion);
mcWave.play();
}
functionpauseSnd(e:MouseEvent):void{
if(!isSoundPlay)return;
isSoundPlay=false;
sndPostion=sndChannel.position;
sndChannel.stop();
mcWave.stop();
}flashas3使用,播放聲音和加載外部聲音文件在AS3中使用聲音跟AS2有很大的不同。先看下Flash幫助中的一些介紹,然后我們再使用導入到Flash中的聲音做個小測試。
理解聲音的結構應用程序可以從4個地方加載聲音:運行時從外部聲音文件里加載內嵌到SWF文件里的聲音資源從連接到用戶系統(tǒng)的麥克風上獲取聲音數(shù)據從遠程多媒體服務器,比如FlashMediaServer獲取聲音流可以等到聲音全部加載后再播放,也可以邊加載邊播放。ActionScript3.0和FlashPlayer支持以mp3格式存儲的聲音。它們不能直接加載或播放其他格式的聲音,比如WAV或AIFF。使用AdobeFlashCS3Professional,可以導入WAV或AIFF格式的聲音,然后就可以把它們以MP3的格式嵌入到SWF文件中。Flash開發(fā)工具可以壓縮嵌入的聲音文件以減少文件大小,不過這樣需要以降低聲音質量的代價。更多信息查看"ImportingSounds"inUsingFlash.ActionScript3.0聲音使用flash.media包中的下列類類描述flash.media.SoundSound類用來加載聲音,管理聲音的基本屬性以及使聲音開始播放flash.media.SoundChannel當程序播放一個聲音對象的時候,會創(chuàng)建一個新的SoundChannel對象控制播放。SoundChannel對象同時控制聲音的左右頻道。每個播放的聲音都有自己的SoundChannel對象。flash.media.SoundLoaderContextSoundLoaderContext類指定當加載一個聲音的時候使用多少秒的緩沖區(qū),以及從服務器加載文件的時候FlashPlayer是否查找跨域策略文件。SoundLoaderContext對象作為Sound.load()方法的參數(shù)使用。flash.media.SoundMixerSoundMixer類控制程序中所有聲音的回放及安全屬性。實際上,多個聲音頻道通過一個共同的SoundMixer對象混合在一起,因此,SoundMixer對象的屬性會影響正在播放的所有SoundChannel對象。flash.media.SoundTransformSoundTransform類包含用于控制音量和平衡的值。SoundTransform對象可以應用到一個單獨的SoundChannel對象,全局的SoundMixer對象或者一個Microphone對象。flash.media.ID3InfoID3Info對象包含mp3文件中的ID3元數(shù)據信息。flash.media.MicrophoneMicrophone類表示連接到用戶電腦上的麥克風或者其他聲音輸入設備。從麥克風輸入的音頻可以傳送到本地喇叭上或者遠程服務器上。Microphone對象控制它自己聲音流的取樣率。每個加載和播放的聲音都需要它自己的Sound類和SoundChannel類。從多個SoundChannel實例輸出的聲音在播放中通過全局的SoundMixer混合在一起。Sound,SoundChannel和SoundMixer類不能用在從麥克風或者流媒體服務器獲取的聲音上。加載外部聲音文件Sound類的每個實例都用來加載和回放指定的聲音。應用程序不能重復使用一個Sound對象加載多于一個的聲音。如果想加載一個新的聲音,需要創(chuàng)建一個新的聲音對象。如果加載一個小的聲音文件,比如要附加在按鈕上的點擊聲音,可以像下面這樣創(chuàng)建一個新的Sound,然后讓它自動加載聲音文件:ActionScriptCode:varreq:URLRequest=newURLRequest("click.mp3");var
s:Sound=newSound(req);Sound()構造函數(shù)使用一個URLRequest對象作為第一個參數(shù)。當指定了URLRequest參數(shù)的時候,Sound對象就開始自動加載指定的聲音文件。除了這個最簡單的情況之外,應用程序都應該注意聲音的加載過程并監(jiān)視加載過程中出現(xiàn)的錯誤。比如,如果這個點擊聲音特別的大,可能在用戶點擊按鈕觸發(fā)這個聲音的時候這個聲音文件還沒有完全加載完。試圖播放一個未加載完的聲音可能導致一個運行期錯誤。安全的做法是等聲音完全加載后再允許用戶的那些可能導致聲音播放的行為。在聲音加載過程中,Sound對象會發(fā)送幾個不同的事件。應用程序可以監(jiān)聽這些事件來跟蹤加載過程以確保聲音在完全加載后才能播放。下表列出了聲音對象可能發(fā)送的事件。事件描述open(Event.OPEN)在聲音加載操作剛開始時發(fā)送。progress(ProgressEvent.PROGRESS)當從文件或者流中接收到數(shù)據的時候周期性的發(fā)送。id3(Event.ID3)當一個mp3聲音的ID3數(shù)據可用時發(fā)送。complete(Event.COMPLETE)當聲音的所有數(shù)據加載完后發(fā)送。ioError(IOErrorEvent.IO_ERROR)如果聲音文件不能定位或者加載過程中在所有數(shù)據接收完之前被中斷的時候發(fā)送。下面的代碼演示了如何在聲音加載完后播放一個聲音:ActionScriptCode:importflash.events.Event;import
flash.media.Sound;import
.URLRequest;
var
s:Sound=newSound();s.addEventListener(Event.COMPLETE,onSoundLoaded);var
req:URLRequest=newURLRequest("bigSound.mp3");s.load(req);
function
onSoundLoaded(event:Event):void{
var
localSound:Sound=event.targetasSound;
localSound.play();}首先,這段示例代碼創(chuàng)建了一個新的Sound對象,但并沒有指定URLRequest參數(shù)。然后,它監(jiān)聽Sound對象的Event.COMPLETE事件,當所有聲音數(shù)據加載完后執(zhí)行onSoundLoaded()方法。接下來,它使用一個新的URLRequest值調用Sound.load()方法。當聲音全部加載完后執(zhí)行onSoundLoaded()方法。Event對象的target屬性是Sound對象的引用。調用Sound對象的play()方法開始播放聲音。監(jiān)視聲音加載過程聲音可能非常大,加載需要相當長的時間。FlashPlayer允許在聲音全部加載完前就能播放,你可能想想給用戶一個顯示聲音加載了多少以及播放了多少。Sound類的兩個事件使得顯示加載進度變得相當容易:ProgressEvent.PROGRESS和Event.COMPLETE.下面的代碼展示了如何使用這些事件顯示聲音的加載進度:ActionScriptCode:importflash.events.Event;import
flash.events.ProgressEvent;import
flash.media.Sound;import
.URLRequest;
var
s:Sound=newSound();s.addEventListener(ProgressEvent.PROGRESS,onLoadProgress);s.addEventListener(Event.COMPLETE,onLoadComplete);s.addEventListener(IOErrorEvent.IO_ERROR,onIOError);
var
req:URLRequest=newURLRequest("bigSound.mp3");s.load(req);
function
onLoadProgress(event:ProgressEvent):void{
var
loadedPct:uint=
Math.round(100*(event.bytesLoaded/event.bytesTotal));
trace("Thesoundis"+loadedPct+"%loaded.");}
functiononLoadComplete(event:Event):void{
varlocalSound:Sound=event.targetasSound;
localSound.play();}functiononIOError(event:IOErrorEvent){
trace("Thesoundcouldnotbeloaded:"+event.text);}這段代碼首先創(chuàng)建了一個Sound對象,然后為事件ProgressEvent.PROGRESS和Event.COMPLETE添加監(jiān)聽器。在調用了Sound.load()方法及收到第一組數(shù)據后,開始出現(xiàn)ProgressEvent.PROGRESS事件,觸發(fā)onSoundLoadProgress()方法。聲音加載的百分比等于ProgressEvent對象的bytesLoaded屬性除以bytesTotal屬性。在Sound對象上同樣可以獲取bytesLoaded和bytesTotal。上面的代碼簡單展示了聲音加載信息,但是你可以使用bytesLoaded和bytesTotal值來控制進度條組件。這段代碼同樣展示了如何組織和響應加載中發(fā)生的錯誤。比如,如果無法定位指定的聲音文件,會發(fā)送Event.IO_ERROR事件。前面代碼中當發(fā)生錯誤時會調用onIOError()方法顯示簡單的錯誤信息。使用嵌入的聲音
好了,下面我們把聲音導入到庫里使用。
打開FlashCS3,選擇文件->導入到庫,選擇好聲音,然后確定后會導入聲音。打開庫面板,找到我們導入的聲音,右鍵,選擇”linkage…”菜單\o"soundlinkage.JPG"會彈出如下框,選擇ExportforActionScript注意觀察這個彈出框,它與AS2中明顯不同的是,標識符欄(identifier欄)不能填寫,而類(Class)和基類(Baseclass)欄必須填寫。類的名字默認是聲音的文件名,但是名字中只能能有字母數(shù)字,且以字母開頭,因此圖中的名字01.mp3是不合格的,可以改為mp3或其他符合規(guī)則的名字?;惥褪莊lash.media.Sound。我們點確定,會彈出下框:大意是指定的類”mp3″在類路徑下找不到,在SWF文件導出時會自動為你創(chuàng)建一個類。點確定就可以了。
在幀上寫如下代碼:ActionScriptCode:vardrum:mp3=newmp3();var
channel:SoundChannel=drum.play();導出,就可以聽到聲音了。\o"PermanentLink:[as3]播放聲音"[as3]播放聲音播放一個加載的聲音可以簡單的調用Sound對象的Sound.play()方法,就像下面這樣:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("smallSound.mp3"));snd.play();當使用ActionScript3.0播放聲音的時候,你可以實現(xiàn)下列操作:從一個指定的位置播放聲音(不一定是最開始)暫停聲音,然后從暫停的位置處重新開始播放可以精確的知道聲音什么時候播放完了跟蹤聲音的播放進度當聲音播放的時候改變音量或者均衡要在播放過程中實現(xiàn)這些效果,使用SoundChannel,SoundMixer,和SoundTransform類.SoundChannel控制一個單獨的聲音的播放.SoundChannel.position屬性可以被當作播放頭,用來指示數(shù)據播放的位置.當程序調用Sound.play()方法時,會創(chuàng)建一個新的SoundChannel實例來控制播放.程序可以為Sound.play()方法指定它的startTime參數(shù),該參數(shù)接收以毫秒為單位的數(shù)字,這樣就可以使聲音從指定的位置開始播放.如果同時指定了Sound.play()方法的startTime參數(shù)和loops參數(shù),那么當聲音會從相同的起始位置重復播放就像下面這樣:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("repeatingSound.mp3"));snd.play(1000,3);在這個例子中,聲音會接連從離開始1秒的位置播放3次.暫停和重新開始聲音如果你的程序播放一個長聲音,比如一首歌或者播客(podcasts,暫譯為播客),你可能想允許用戶可以暫停,然后繼續(xù)播放這個聲音.然后聲音并不能像字面意思那樣實現(xiàn)暫停,它只能停止(從字面意思上來講,暫停跟停止是不同的,我們想實現(xiàn)暫停效果,但是沒有直接的ActionScript語句可以實現(xiàn)暫停).但是,聲音可以從任何位置處播放.因此你可以記錄下它停止的位置,然后從這個位置后面開始播放,就實現(xiàn)了暫停效果.比如,首先像下面這樣加載并播放一個聲音:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("bigSound.mp3"));var
channel:SoundChannel=snd.play();當聲音播放的時候SoundChannel.position屬性顯示聲音當前的播放位置.程序可以像下面這個例子一樣,在停止它之前記錄下它的位置:ActionScriptCode:varpausePosition:int=channel.position;channel.stop();要重新播放聲音,傳遞之前記錄的播放位置數(shù)據來使聲音從它停止的地方重新開始播放.ActionScriptCode:channel=snd.play(pausePosition);監(jiān)視播放你的程序可能需要知道什么時候它停止了播放,以便去播放另一個聲音,或者清除在播放過程中使用的一些資源.當聲音播放完畢的時候SoundChannel類發(fā)送一個Event.SOUND_COMPLETE事件.你的程序可以監(jiān)聽這個事件并作出適當?shù)膭幼?就像下面這樣:ActionScriptCode:importflash.events.Event;import
flash.media.Sound;import
.URLRequest;
var
snd:Sound=newSound("smallSound.mp3");var
channel:SoundChannel=snd.play();s.addEventListener(Event.SOUND_COMPLETE,onPlaybackComplete);
public
functiononPlaybackComplete(event:Event){
trace("Thesoundhasfinishedplaying.");}SoundChannel類在播放中并不發(fā)送進度事件.要報告播放進度,你可以自己設置一個時間進制并跟蹤播放頭的位置.可以使用SoundChannel.position屬性值除以聲音長度來計算已播放的百分數(shù):ActionScriptCode:varplaybackPercent:uint=100*(channel.position/snd.length);但是,只有在播放前聲音全部加載完了,這段代碼才能精確顯示播放的百分比.Soun
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度醫(yī)療健康股權分配與產業(yè)布局協(xié)議
- 二零二五年度酒店員工勞動合同與員工培訓及職業(yè)素養(yǎng)提升合同
- 2025年度金融控股集團間戰(zhàn)略資金借款合同
- 二零二五年度高空作業(yè)安全協(xié)議責任書(高空設備檢修安全協(xié)議)
- 二零二五年度鮮魚養(yǎng)殖與品牌營銷合作合同
- 二零二五年度電子商務平臺技術支持合同范本
- 二零二五年度汽車租賃代駕保險保障合同
- 2025年度餐廳門面租賃與地方旅游發(fā)展合作合同
- 安徽省2025年度非全日制用工勞動合同書解除與終止協(xié)議
- 數(shù)據安全保障與服務合作合同
- 部編版小學道德與法治四年級下冊課堂同步練習試題及答案(全冊)
- 2024煤礦安全規(guī)程解讀
- 德州環(huán)鋰新能源科技有限公司2萬噸年廢舊鋰電池回收項目環(huán)境影響報告書
- 2025年江蘇省中職《英語》學業(yè)水平考試核心考點試題庫500題(重點)
- 延期實習申請書
- 2025年江蘇信息職業(yè)技術學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 易制毒化學品理論考試試題及答案
- 2024年煙臺汽車工程職業(yè)學院高職單招職業(yè)適應性測試歷年參考題庫含答案解析
- 2024年江西旅游商貿職業(yè)學院高職單招語文歷年參考題庫含答案解析
- 2025年春新人教PEP版英語三年級下冊課件 Unit 1 Part C 第8課時 Reading time
- IIT臨床醫(yī)學項目管理
評論
0/150
提交評論