一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

as3 聲音的控制

 宜賓翠屏區(qū) 2019-02-25

一、加載庫(kù)中聲音

導(dǎo)入聲音到庫(kù)---右鍵---鏈接---勾選“為ActionScript導(dǎo)出”---類(即名稱):cyzy

點(diǎn)選第一幀,打開動(dòng)作面板,寫代碼:

var sy:cyzy = new cyzy() //聲明一個(gè)聲音

sy.play() //播放一個(gè)聲音

測(cè)試:OK。

二、加載本地聲音

導(dǎo)入聲音到庫(kù),文件名:cyzy.mp3

在場(chǎng)景第一層第一幀寫代碼:

var dizhi:URLRequest=new URLRequest("cyzy.mp3")

var sywj:Sound=new Sound()

sywj.load(dizhi)

sywj.play()

測(cè)試:OK。

三、加載遠(yuǎn)程聲音

把“加載本地聲音”中的本地地址換成網(wǎng)絡(luò)地址即可。

在場(chǎng)景第一層第一幀寫代碼:

var dizhi:URLRequest=

newURLRequest("http://www1./uploadfile/2009-4/20094118445463509.mp3")

var sywj:Sound=new Sound()

sywj.load(dizhi)

sywj.play()

測(cè)試:OK。

四、聲音事件

打開動(dòng)作---左欄---打開flash.media包---打開Sound---事件:共7個(gè),常用的有4個(gè),下面一一介紹。

(一)、開始事件

所有事件都是一類即一個(gè)包(事件包):flash.event---打開他---Event---屬性---雙擊open---得到Event.OPEN.

在“四、加載遠(yuǎn)程聲音”代碼之后寫:

sywj.addEventListener(Event.OPEN,kshs); //kshs:開始函數(shù)

function kshs(event:Event) {

trace("開始加載了");

}

測(cè)試:當(dāng)歌曲開始播放時(shí),在輸出面板中出現(xiàn)“開始加載了”字樣。

(二)、加載中事件

聲音從加載到加載完成,中間有一段時(shí)間,這段時(shí)間就觸發(fā)了加載中事件。代碼:

sywj.addEventListener(ProgressEvent.PROGRESS,jzzhs); //jzzhs:加載中函數(shù)

function jzzhs(event:ProgressEvent) {

trace("正在加載中");

}

測(cè)試:輸出面板顯示:開始加載,正在加載中(不停循環(huán))。

注意:偵聽器括號(hào)內(nèi)參數(shù)獲取方法:點(diǎn)flash event---點(diǎn)ProgressEvent......

(三)、完成事件

加載完成了,我希望電腦通知我,這是就觸發(fā)了完成事件。

sywj.addEventListener(Event.COMPLETE,wchs)

function wchs(event:Event) {

trace("加載完成了");

}

(四)、出錯(cuò)事件

如果程序出錯(cuò),我希望電腦告訴我,這就觸發(fā)了出錯(cuò)事件。

sywj.addEventListener(IOErrorEvent.IO_ERROR,cchs)

function cchs(event:IOErrorEvent) {

trace("出錯(cuò)了");

}

將mp3改為mp4,然后測(cè)試:

輸出面板顯示:打開 URL 'http://www./xszy/bjfc/200306wwj/music/myq.mp4' 時(shí)出錯(cuò)

出錯(cuò)了

這個(gè)很管用,我們?cè)诰幊绦蚧蛴脛e人程序時(shí),那個(gè)地方出錯(cuò),電腦會(huì)告訴你的。

//----聲音事件完整代碼----

sywj.addEventListener(Event.OPEN,kshs);

sywj.addEventListener(ProgressEvent.PROGRESS,jzzhs);

sywj.addEventListener(Event.COMPLETE,wchs)

sywj.addEventListener(IOErrorEvent.IO_ERROR,cchs)

function kshs(event:Event) {

trace("開始加載了");

}

function jzzhs(event:ProgressEvent) {

trace("正在加載中");

}

function wchs(event:Event) {

trace("加載完成了");

}

function cchs(event:IOErrorEvent) {

trace("出錯(cuò)了");

}

五、加載進(jìn)度

1、加載文本

前面講的輸出面板顯示的文字,在發(fā)布以后是不顯示的。加載了多少,希望我們的用戶能知道。如果要看到,就要把他顯示出來:

我們用前面“三、遠(yuǎn)程加載聲音”之后的代碼。

新建一層,起名:加載文本,放as層下。動(dòng)態(tài)文本,實(shí)例名稱:jd_txt ,然后在上節(jié)“(二)、加載中事件”中把trace("正在加載中"); 改寫為:

jd_txt.text="正在加載中";

測(cè)試:正在加載中 文字出現(xiàn)。(輸出面板此時(shí)只有:開始加載了、加載完成了。)

2、求加載百分比

加載百分比=(已加載字節(jié)數(shù)/總字節(jié)數(shù))x100%

把上面jd_txt.text="正在加載中"; 改寫為:

jd_txt.text="已加載了:"+ event.bytesLoaded/event.bytesTotal;

測(cè)試:已加載了:1 。

但變化過程中有很多小數(shù),由于變化快,看不清楚,我們乘上100:

jd_txt.text="已加載了:"+(event.bytesLoaded/event.bytesTotal")*100;

測(cè)試:已加載了:100 ok

我們發(fā)現(xiàn),剛才計(jì)算時(shí)有些小數(shù),我們不希望他產(chǎn)生小數(shù)。這時(shí)可以在百分比前加個(gè)四舍五入的代碼(round方法):

jd_txt.text="已加載了:"+Math.round((event.bytesLoaded/event.bytesTotal)*100);

是小數(shù)還是整數(shù),可以用trace(Math.round((event.bytesLoaded/event.bytesTotal)*100));

注釋掉這個(gè)// jd_txt.text="已加載了:"+(event.bytesLoaded/event.bytesTotal")*100;然后測(cè)試:

輸出面板全是整數(shù)。再把代碼中的“Math.round”去掉測(cè)試:輸出面板全是小數(shù)。

還少了個(gè)百分號(hào),加上去:

jd_txt.text="已加載了:"+Math.round((event.bytesLoaded/event.bytesTotal)*100) +"%";

3、進(jìn)度條

百分比好啦,再給個(gè)進(jìn)度條。

插入---新建---影片剪輯---矩形工具畫一長(zhǎng)條,左對(duì)齊、頂對(duì)齊---在100幀出插入關(guān)鍵幀。點(diǎn)第一幀,將長(zhǎng)條寬度調(diào)為1,在1~100之間形狀補(bǔ)間。一開始這個(gè)條是在停止?fàn)顟B(tài)的,所以,新建層2,在第一幀打開動(dòng)作面板寫代碼:stop();

返回場(chǎng)景,新建一層,起名:進(jìn)度條。按ctrl+L把庫(kù)打開,將影片剪輯拖入該層第一幀,實(shí)例名稱:jdt_mc

準(zhǔn)備工作作好了,現(xiàn)在寫代碼:

jdt_mc.gotoAndStop(); 停止在哪一幀呢?加載的那一幀,即上面的Math.round((event.bytesLoaded/event.bytesTotal)*100),于是,代碼可以寫成這樣:

jdt_mc.gotoAndStop(Math.round((event.bytesLoaded/event.bytesTotal)*100));

測(cè)試:ok

象上面那樣寫太麻煩,于是我們聲明一個(gè)加載進(jìn)度(jzjd):

var jzjd:Number=Math.round((event.bytesLoaded/event.bytesTotal)*100);

于是,動(dòng)態(tài)文本和進(jìn)度條代碼改寫為;

jd_txt.text="已加載了:"+jzjd+"%";

jdt_mc.gotoAndStop(jzjd);

剛開始時(shí)進(jìn)度條有一細(xì)線能看見,我們希望開始時(shí)即初始化看不見進(jìn)度條,而加載時(shí)能看見,加載完成后又消失。那么就要在前面先初始化一下:

jdt_mc.visible=false;

再在開始加載函數(shù)內(nèi)寫:jdt_mc.visible=true;

再在加載完成函數(shù)內(nèi)寫:jdt_mc.visible=false;

測(cè)試:OK。別忘了保存.

// -------- 從“三、加載遠(yuǎn)程聲音”到“五、加載進(jìn)度”完整代碼:--------

//聲明

var dizhi:URLRequest=

new URLRequest("http://www./xszy/bjfc/200306wwj/music/myq.mp3");

var sywj:Sound=new Sound();

//初始化

jdt_mc.visible=false;

sywj.load(dizhi,liu);

sywj.play();

//加載過程

sywj.addEventListener(Event.OPEN,kshs);

sywj.addEventListener(ProgressEvent.PROGRESS,jzzhs);

sywj.addEventListener(Event.COMPLETE,wchs);

sywj.addEventListener(IOErrorEvent.IO_ERROR,cchs);

function kshs(event:Event) {

//trace("開始加載了");

jdt_mc.visible=true;

}

function jzzhs(event:ProgressEvent) {

var jzjd:Number=Math.round((event.bytesLoaded/event.bytesTotal)*100);

jd_txt.text="已加載了:"+jzjd+"%";

jdt_mc.gotoAndStop(jzjd);

}

function wchs(event:Event) {

//trace("加載完成了");

jdt_mc.visible=false;

}

function cchs(event:IOErrorEvent) {

trace("出錯(cuò)了");

}

六、設(shè)置緩沖

所謂緩沖,就是先加載一段時(shí)間,然后再進(jìn)行播放。緩沖一般設(shè)置10~20秒。我們先聲明一個(gè)流(liu):

var liu:SoundLoaderContext=new SoundLoaderContext(10000,true); //加載10秒后開始播放

括號(hào)內(nèi)參數(shù)為時(shí)間和安全策略即(時(shí)間,安全策略)。我們?cè)O(shè)置時(shí)間為10秒(1秒=1000毫秒),安全策略為true。

把聲音的流(liu)要寫到加載代碼中才能起作用。即在“三、加載遠(yuǎn)程聲音”中的sywj.load(dizhi)中加進(jìn)流“l(fā)iu”:

sywj.load(dizhi,liu);

測(cè)試:加載10秒后開始播放。

七、聲音控制

新建一層,起名控制。拖入3個(gè)按鈕:播放、暫停、停止,實(shí)例名稱分別為:bf_btn、zt_btn、tz_btn 保存。

選中AS層第一幀,打開動(dòng)作面板,先聲明聲音控制:

var sykz:SoundChannel=new SoundChannel(); //sykz:聲音控制

聲明了以后還需要賦值,即在“三、加載遠(yuǎn)程聲音”中把sywj.play();改寫為:

sykz=sywj.play();

怎么控制?寫代碼:

停止:

tz_btn.addEventListener(MouseEvent.CLICK,tzhs); //偵聽停止

function tzhs(event:MouseEvent) {

sykz.stop();

}

播放:

bf_btn.addEventListener(MouseEvent.CLICK,bfhs); //偵聽播放

function bfhs(event:MouseEvent) {

sykz= sywj.play();

}

暫停:

暫停和停止的區(qū)別:停止是將播放頭停到開始的位置,下次播放聲音將從頭開始;暫停是將播放頭暫停在聲音所播放的地方,下次播放將從暫停處接著播放。這就需要有一個(gè)方法來記錄他當(dāng)時(shí)的位置,我們聲明一個(gè)變量來記錄他:var ztwz:Number; //ztwz:暫停位置。

var ztwz:Number; //聲明暫停位置變量

zt_btn.addEventListener(MouseEvent.CLICK,zths); //偵聽暫停

function zths(event:MouseEvent) {

ztwz=sykz.position; //停止在當(dāng)前位置

sykz.stop();

}

然后在停止函數(shù)中寫上:ztwz=0; 否則,暫停和停止是一樣的。

為了從當(dāng)前位置播放,在播放函數(shù)中要填ztwz這個(gè)參數(shù)。即:sykz= sywj.play(ztwz);

聲音控制全部代碼:

var sykz:SoundChannel=new SoundChannel(); //聲明聲音控制變量(sykz)

var ztwz:Number; //聲明暫停位置變量

sykz= sywj.play();

tz_btn.addEventListener(MouseEvent.CLICK,tzhs); //偵聽停止

bf_btn.addEventListener(MouseEvent.CLICK,bfhs); //偵聽播放

zt_btn.addEventListener(MouseEvent.CLICK,zths); //偵聽暫停

function tzhs(event:MouseEvent) {

ztwz=0; //播放頭處于0的位置

sykz.stop();

}

function bfhs(event:MouseEvent) {

sykz.stop(); //先停止所有聲音再播放,否則有重音或有很多聲音。

sykz= sywj.play(ztwz); //從暫停處開始播放

}

function zths(event:MouseEvent) {

ztwz=sykz.position; //暫停在當(dāng)前位置

sykz.stop();

}

八、播放條

插入---新建---影片剪輯---起名滑道---矩形工具拉一矩形即長(zhǎng)條(0 0),即左對(duì)齊、頂對(duì)齊。

插入---新建---影片剪輯---起名滑道底部---矩形工具拉一矩形即長(zhǎng)條(0 0)。

插入---新建---影片剪輯---起名滑塊---矩形工具拉一小矩形(0 0)。

返回場(chǎng)景,新建一層,起名播放條。將以上三個(gè)影片剪輯拖入放好(由下至上為:滑道底部、滑道、滑塊),滑道、滑塊實(shí)例名稱分別為:hd_mc、hk_mc.并將播放、暫停、停止三個(gè)按鈕拖入滑道底部上。

在動(dòng)作面板最下寫代碼:

//--------------控制條—滑塊--------------

hk_mc.addEventListener(MouseEvent.MOUSE_DOWN,hkax); //hkax:滑塊按下

function hkax(event:MouseEvent) {

hk_mc.startDrag();

}

測(cè)試:滑塊可以拖動(dòng),而且不離開鼠標(biāo)。我們要把他限制在滑道內(nèi),且松開鼠標(biāo),滑塊停止拖動(dòng)。再寫代碼:

hk_mc.addEventListener(MouseEvent.MOUSE_UP,hksk); //hksk:滑塊松開

function hksk(event:MouseEvent) {

hk_mc.stopDrag();

}

我們還要解決鼠標(biāo)形狀問題,即鼠標(biāo)放在滑塊上時(shí),手形鼠標(biāo)出現(xiàn):

//------------初始化----------------

hk_mc.buttonMode=true;//將鼠標(biāo)變?yōu)槭种割^形狀

下面解決滑塊拖動(dòng)的范圍問題:

在上面開始拖動(dòng)的函數(shù)中聲明左、上、右、下、方框:

var shang=hk_mc.y;

var zuo=hd_mc.x;

var xia=0;

var you=hd_mc.width-hk_mc.width;//減去滑塊寬,滑塊只能移動(dòng)到滑道的右邊緣。

var fk:Rectangle=new Rectangle(zuo,shang,you,xia);

測(cè)試:鼠標(biāo)離開滑塊后,滑塊還可以動(dòng)。這是少了一個(gè)事件,即當(dāng)離開滑塊的事件:

stage.addEventListener(MouseEvent.MOUSE_UP,hklk);//滑塊離開

function hklk(event:MouseEvent) {

hk_mc.stopDrag();

}

//意思為當(dāng)在舞臺(tái)上拖動(dòng)時(shí),不可以拖動(dòng)。

(28講)當(dāng)音樂播放時(shí),滑塊也跟著走動(dòng)。代碼怎么寫呢?

我們要先聲明兩個(gè)變量,一個(gè)記錄音樂的總長(zhǎng)度,另一個(gè)記錄音樂的百分比。在-控制條—滑塊---這一塊寫:

var zcd; //總長(zhǎng)度

var bfb; //百分比

這兩個(gè)變量要實(shí)時(shí)記錄,所以要用舞臺(tái)進(jìn)行監(jiān)聽,寫:

stage.addEventListener(Event.ENTER_FRAME,cfzx); //cfzx:重復(fù)執(zhí)行

function cfzx(event:Event) {

trace(123);

}

測(cè)試:輸出面板123重復(fù)顯示,也就是說他一直在監(jiān)聽著。

獲取聲音總長(zhǎng)度方法:flashmedia---Sound---屬性---length(這是當(dāng)前聲音的長(zhǎng)度,以毫秒計(jì)算),在上面函數(shù)內(nèi)寫:

zcd=sywj.length/( sywj.bytesLoaded/ sywj.bytesTotal);

bfb=sykz.position/zcd; //百分比=當(dāng)前長(zhǎng)度/總長(zhǎng)度

hk_mc.x=bfb*(hd_mc.width -hk_mc.width)+hd_mc.x;

//如果不加滑道x(hd_mc.x),滑塊就會(huì)跑到x=0的位置,而不是滑道的左端。

測(cè)試:滑塊剛開始時(shí)跳移了一下。

要解決滑塊剛開始時(shí)跳移問題,首先要知道原因。原因是剛開始時(shí)總長(zhǎng)度(zcd)和百分比(bfb)是沒有的。(29講)是不是這個(gè)原因呢?在百分比一行下加個(gè) trace(zcd); 測(cè)試一下:輸出面板出現(xiàn)NaN。NaN:表示為非數(shù)值。這就要加個(gè)條件語(yǔ)句:

function cfzx(event:Event) {

//trace(123);

zcd=sywj.length/( sywj.bytesLoaded/ sywj.bytesTotal);

bfb=sykz.position/zcd;

if (zcd) {

hk_mc.x=bfb*(hd_mc.width -hk_mc.width)+hd_mc.x;

} else {

hk_mc.x=hd_mc.x;

}

}

//如果總長(zhǎng)度zcd為真即為數(shù)值時(shí),就播放hk_mc.x=bfb*(hd_mc.width -hk_mc.width)+hd_mc.x; //如果總長(zhǎng)度zcd為假即為非數(shù)值時(shí),就播放hk_mc.x=hd_mc.x;

測(cè)試:滑塊可以隨著音樂的播放而移動(dòng),但我們用鼠標(biāo)拖動(dòng)卻不可以。要解決這個(gè)問題。

(30講)在重復(fù)執(zhí)行代碼中,滑塊是按他的條件語(yǔ)句運(yùn)行的,我們就要再加個(gè)條件語(yǔ)句,即當(dāng)我們按下鼠標(biāo)時(shí),滑塊要停止自動(dòng)移動(dòng)。我們先聲明一個(gè)判斷(pd):

var pd:Boolean=false;

然后在hkax函數(shù)中寫:pd=true;

在hksk函數(shù)中寫:pd=false;

在hklk函數(shù)中寫:pd=false;

在cfzx函數(shù)中寫:

function cfzx(event:Event) {

//trace(123);

zcd=sywj.length/( sywj.bytesLoaded/ sywj.bytesTotal);

bfb=sykz.position/zcd;

if (pd) {

} else {

if (zcd) {

hk_mc.x=bfb*(hd_mc.width -hk_mc.width)+hd_mc.x;

} else {

hk_mc.x=hd_mc.x;

}

}

}

//當(dāng)判斷pd為假時(shí)(初始值為假)就按正常播放。即播放if (zcd) {

hk_mc.x=bfb*(hd_mc.width -hk_mc.width)+hd_mc.x;

} else {

hk_mc.x=hd_mc.x;

};當(dāng)判斷pd為真時(shí),就執(zhí)行滑塊按下函數(shù)。因?yàn)樵诨瑝K按下函數(shù)中我們?cè)O(shè)置判斷為真(pd=true;)。

測(cè)試:滑塊可以拖動(dòng),但松開后又彈回去了。

(31講)解決滑塊松開后又彈回去,也就是在if(pd){}大括號(hào)里要計(jì)算出播放條位置,并且在按下鼠標(biāo)時(shí)要停止音樂。在hkax函數(shù)中寫:sykz.stop();在再if (pd) {}中寫:

ztwz=zcd*hk_mc.x/(hd_mc.width -hk_mc.width);

這個(gè)暫停位置是怎么來的呢?可以這樣理解:

當(dāng)前播放頭位置 滑塊的當(dāng)前位置

——————— : ———————

音樂總長(zhǎng)度 滑道的長(zhǎng)度

從該公式可以求出任意一個(gè)值。上面的ztwz就是“當(dāng)前播放頭位置=總長(zhǎng)度*滑塊的當(dāng)前位置/滑道的長(zhǎng)度”。就是這么來的。

在hksk函數(shù)內(nèi)加寫:sykz=sywj.play(ztwz); 加了他后在hklk里有重復(fù)(播放的)聲音,而去掉他,在場(chǎng)景松開后又不播放。咋辦?我們知道在if(pd){}中滑塊x是變化的,應(yīng)該減去滑道(hd)的x,即:

if(pd){

ztwz=zcd*(hk_mc.x-hd_mc.x)/(hd_mc.width -hk_mc.width);

}else{

if.......

}

(32講)當(dāng)在場(chǎng)景中hklk拖動(dòng)后既要播放,還要沒有重音,那么在播放之前先停掉所有聲音,就沒有重音了。即在hklk函數(shù)中播放之前加個(gè)停止代碼(sykz.stop();):

function hklk(event:MouseEvent) {

pd=false;

hk_mc.stopDrag();

sykz.stop();

sykz=sywj.play(ztwz);

}

測(cè)試:以上問題解決了,但三個(gè)按鈕再次使用不起作用,還是有重音,我們?cè)诓シ虐粹o函數(shù)中加個(gè)(sykz.stop();):

function bfhs(event:MouseEvent) {

sykz.stop();

sykz=sywj.play(ztwz);

}

測(cè)試:ok.

(33~36講)當(dāng)我們點(diǎn)擊滑道某一位置,滑塊會(huì)跳到某一位置。這個(gè)功能怎么實(shí)現(xiàn)呢?

在最下面寫代碼:

//---------控制條_滑道-------

hd_mc.buttonMode=true;//將鼠標(biāo)變?yōu)槭种割^形狀

hd_mc.addEventListener(MouseEvent.MOUSE_DOWN,hdax); //hdax:滑道按下

hd_mc.addEventListener(MouseEvent.MOUSE_UP,hdsk); //hdsk:滑道松開

function hdax(event:MouseEvent) {

pd=true;

sykz.stop();

if (mouseX<(hd_mc.width -hk_mc.width)+hd_mc.x) {

hk_mc.x=mouseX;

} else {

hk_mc.x=(hd_mc.width -hk_mc.width)+hd_mc.x;

} //if判斷語(yǔ)句使滑塊在滑道內(nèi)移動(dòng)

ztwz=zcd*(hk_mc.x-hd_mc.x)/(hd_mc.width -hk_mc.width);

}

function hdsk(event) {

pd=false;

sykz.stop();

sykz=shengyin.play(ztwz);

}

//-------------從“三、加載遠(yuǎn)程聲音”到“八、播放條”完整代碼:--------------------------

//---------聲明----------------
var dizhi:URLRequest=new URLRequest("http://www./xszy/bjfc/200306wwj/music/myq.mp3");
var shengyin:Sound=new Sound();
var liu:SoundLoaderContext=new SoundLoaderContext(10000,true);
var sykz:SoundChannel=new SoundChannel();
var ztwz:Number;
//------------初始化------------------
hk_mc.buttonMode=true;//將鼠標(biāo)變?yōu)槭种割^形狀
jdt_mc.visible=false;
shengyin.load(dizhi,liu);
sykz=shengyin.play();
//-----------加載過程------------------
shengyin.addEventListener(Event.OPEN,kshs);
shengyin.addEventListener(ProgressEvent.PROGRESS,jzzhs);
shengyin.addEventListener(Event.COMPLETE,wchs);
shengyin.addEventListener(IOErrorEvent.IO_ERROR,cchs);
function kshs(event:Event) {
//trace("開始加載了");
jdt_mc.visible=true;
}
function jzzhs(event:ProgressEvent) {
var jzjd:Number=Math.round((event.bytesLoaded/event.bytesTotal)*100);
jd_txt.text="已加載了:"+jzjd+"%";
//trace(Math.round((event.bytesLoaded/event.bytesTotal)*100));
//trace(((event.bytesLoaded/event.bytesTotal)*100));
jdt_mc.gotoAndStop(jzjd);
}
function wchs(event:Event) {
//trace("加載完成了");
jdt_mc.visible=false;
}
function cchs(event:IOErrorEvent) {
trace("出錯(cuò)了");
}
//---------聲音控制------------
tz_btn.addEventListener(MouseEvent.CLICK,tzhs);
bf_btn.addEventListener(MouseEvent.CLICK,bfhs);
zt_btn.addEventListener(MouseEvent.CLICK,zths);
function tzhs(event:MouseEvent) {
ztwz=0;
sykz.stop();
}
function bfhs(event:MouseEvent) {
sykz.stop();
sykz=shengyin.play(ztwz);
}
function zths(event:MouseEvent) {
ztwz=sykz.position;
sykz.stop();
}
//-----控制條_滑塊------------------
var shang=hk_mc.y;
var zuo=hd_mc.x;
var xia=0;
var you=hd_mc.width-hk_mc.width;
var fk:Rectangle=new Rectangle(zuo,shang,you,xia);
var zcd;
var bfb;
var pd=false;
hk_mc.addEventListener(MouseEvent.MOUSE_DOWN,hkax);
hk_mc.addEventListener(MouseEvent.MOUSE_UP,hksk);
stage.addEventListener(MouseEvent.MOUSE_UP,hklk);
stage.addEventListener(Event.ENTER_FRAME,cfzx);
function hkax(event:MouseEvent) {
pd=true;
hk_mc.startDrag(false,fk);
sykz.stop();
}
function hksk(event:MouseEvent) {
pd=false;
hk_mc.stopDrag();
sykz=shengyin.play(ztwz);
}
function hklk(event:MouseEvent) {
pd=false;
hk_mc.stopDrag();
sykz.stop();
sykz=shengyin.play(ztwz);
}
function cfzx(event:Event) {
//trace(123);
zcd=shengyin.length/(shengyin.bytesLoaded/shengyin.bytesTotal);
bfb=sykz.position/zcd;
if (pd) {
ztwz=zcd*(hk_mc.x-hd_mc.x)/(hd_mc.width -hk_mc.width);
} else {
if (zcd) {
hk_mc.x=bfb*(hd_mc.width -hk_mc.width)+hd_mc.x;
} else {
hk_mc.x=hd_mc.x;
}
}
}
//---------控制條_滑道-------
hd_mc.buttonMode=true;//將鼠標(biāo)變?yōu)槭种割^形狀
hd_mc.addEventListener(MouseEvent.MOUSE_DOWN,hdax);
hd_mc.addEventListener(MouseEvent.MOUSE_UP,hdsk);
function hdax(event:MouseEvent) {
pd=true;
sykz.stop();
if (mouseX<(hd_mc.width -hk_mc.width)+hd_mc.x) {
hk_mc.x=mouseX;
} else {
hk_mc.x=(hd_mc.width -hk_mc.width)+hd_mc.x;
}
ztwz=zcd*(hk_mc.x-hd_mc.x)/(hd_mc.width -hk_mc.width);
}
function hdsk(event) {
pd=false;
sykz.stop();
sykz=shengyin.play(ztwz);
}

九、(播放條)多首歌曲

(37講)添加按鈕:添加上一首、下一首按鈕,實(shí)例名稱分別為:ss_btn、xs_btn 將滑道底部新建一層,以便調(diào)整長(zhǎng)短,好把所有按鈕放在滑道底部上。//ss:上首、xs:下首

(38講)聲明數(shù)組和索引:

//---------聲明----------------

var gqsz:Array=new Array(); //gqsz:歌曲數(shù)組

var gqsy:int=new int(); //gqsy:歌曲索引

(39講)初始化:

//------------初始化------------------

gqsz[0]="http://www1./uploadfile/2009-4/20094118445463509.mp3";

gqsz[1]="HTTP://blog.linziedu.net/user1/1346/upload/20077124479.mp3";

gqsz[2]="http://news./site1/20100612/005056c000080d7d663224.mp3";

gqsz[3]="http://storage./items/5739916E4F91E638!1000?filename=%E6%AF%9B%E9%98%BF%E6%95%8F%E6%AD%8C%E6%9B%B218%E9%A6%96.mp3";

gqsz[4]="http://www./xszy/bjfc/200306wwj/music/myq.mp3";

gqsz[5]="http://winner./music/mp3/qingzanggaoyuan.mp3";

gqsz[6]="http://58.213.127.41/web/201013154293470/upload/20103685712670.mp3";

//也可以這樣寫:

gqsz=["http://www./xszy/bjfc/200306wwj/music/myq.mp3","http://www./xszy/bjfc/200306wwj/music/myq.mp3",] 這樣太長(zhǎng),還是用上面的好。

gqsy=0;

dizhi.url=gqsz[gqsy]; //dizhi:音樂地址

(40~46講)給上一首、下一首按鈕寫代碼:

//多首歌曲

ss_btn.addEventListener(MouseEvent.CLICK,sshs);//上首按鈕單擊事件 sshs:上首函數(shù)

xs_btn.addEventListener(MouseEvent.CLICK,xshs); //下首按鈕單擊事件xshs:下首函數(shù)

function sshs(event) {

sykz.stop(); //停止所有聲音后再轉(zhuǎn)到上一首,可消除重音

/*if(gqsy>0){

gqsy--;

}else{

gqsy=gqsz.length-1;

}

*/

//另一種寫法:

gqsy=(gqsy>0)?gqsy-1:gqsy=gqsz.length-1;

//trace(gqsy);

cbf(); //初始播放

}

function xshs(event) {

sykz.stop(); //停止所有聲音后再轉(zhuǎn)到下一首,可消除重音

/*if(gqsy<gqsz.length-1){

gqsy++;

}else{

gqsy=0;

}

*/

//另一種寫法:

gqsy=(gqsy<gqsz.length-1)?gqsy+1:0;

trace(gqsy);

cbf(); //初始播放

}

十、循環(huán)播放

(47講)比如有10首歌曲,當(dāng)?shù)?首播放完,播放第2首,以此類推。當(dāng)?shù)?0首播放完,播放第一首。這就叫循環(huán)播放。

先作一個(gè)循環(huán)按鈕,但最好不用用按鈕,用影片剪輯:插入---新建---影片剪輯---起名循環(huán)---確定。在第一幀畫按鈕,共3幀:彈起、經(jīng)過、按下。再新建一層,起名as:stop;

(48講)將制作好的按鈕(即影片剪輯)拖入場(chǎng)景,放合適位,實(shí)例名稱:xh_mc

要循環(huán),就有監(jiān)控,緊跟著就有片斷,片斷就有條件。(49~53講)下面寫代碼:

//-----循環(huán)播放控制----------------------

xh_mc.buttonMode=true;//將鼠標(biāo)變?yōu)槭种割^形狀

addEventListener(Event.ENTER_FRAME,xhhs);//偵聽事件

xh_mc.addEventListener(MouseEvent.CLICK,xhhs); //當(dāng)鼠標(biāo)按下循環(huán)按鈕時(shí)偵聽

function xhhs(event) {

if (int(bfb*100)==99) {

sykz.stop();

gqsy=(gqsy<gqsz.length-1)?gqsy+1:0;

cbf();

}

//trace(int(bfb*100));

}

function djhs(event) {

if (xh_mc.currentFrame==3) {

removeEventListener(Event.ENTER_FRAME,xhhs); //卸載監(jiān)聽

xh_mc.gotoAndStop(1);

} else {

xh_mc.gotoAndStop(3);

addEventListener(Event.ENTER_FRAME,xhhs); //開始監(jiān)聽

}

}

十一、單曲循環(huán)

(54講)制作單曲循環(huán)按鈕。制作方法同“制作循環(huán)按鈕”。

(55講)寫單曲循環(huán)代碼:

//---------單曲循環(huán)--------

addEventListener(Event.ENTER_FRAME,dqhs); //dqhs:單曲函數(shù)

function dqhs(event) {

if (int(bfb*100)==99) {

sykz.stop();

ztwz=0;

cbf();

}

}

測(cè)試:第一首歌曲播放完后會(huì)自動(dòng)單曲循環(huán),這是因?yàn)闆]有給單曲循環(huán)按鈕添加事件,所以這個(gè)單曲循環(huán)是不受控制的。下面看如何控制。

(56講)按鈕控制單曲循環(huán):

先將前面單曲偵聽事件改寫為:

//---------單曲循環(huán)---------

dq_mc.addEventListener(MouseEvent.CLICK,dqdjhs); //dqdjhs:單曲點(diǎn)擊函數(shù)

function dqhs(event) {

if (int(bfb*100)==99) {

sykz.stop();

gqsy=0;

cbf();

}

}

然后再接著寫按鈕控制代碼:

function dqdjhs(event) {

if (dq_mc.currentFrame==2) {

removeEventListener(Event.ENTER_FRAME,dqhs);

dq_mc.gotoAndStop(1);

} else {

dq_mc.gotoAndStop(2);

addEventListener(Event.ENTER_FRAME,dqhs);

}

}

十二、完善

(57講)有幾個(gè)問題。先解決第1個(gè)。

① 加載問題。這首歌加載了5%,我想聽其他的,但他還在繼續(xù)加載。這就是動(dòng)態(tài)文本顯示處的問題了。在加載中函數(shù)(jzzhs):

function jzzhs(event:ProgressEvent) {

var jzjd:Number=Math.round((event.bytesLoaded/event.bytesTotal)*100);

jd_txt.text="已加載了:"+jzjd+"%";

jdt_mc.gotoAndStop(jzjd);

} 中把

var jzjd:Number=Math.round((event.bytesLoaded/event.bytesTotal)*100);中的evene改寫為sywj即可。

測(cè)試:加載了若干,點(diǎn)下一首,又從頭加載歌曲。Ok.

但偶爾出現(xiàn)“加載了NaN%”。我們依然改寫jzzhs,在其中加個(gè)判斷語(yǔ)句:

function jzzhs(event:ProgressEvent) {

var jzjd:Number=Math.round((sywj.bytesLoaded/event.bytesTotal)*100);

if (jzjd) {

jd_txt.text="已加載了:"+jzjd+"%";

jdt_mc.gotoAndStop(jzjd);

} else {

jd_txt.text="已加載了:"+0+"%";

jdt_mc.gotoAndStop(1); //當(dāng)加載數(shù)值為0時(shí),進(jìn)度條停在第1幀

}

}

②(58講)第2個(gè)問題是在舞臺(tái)上單擊鼠標(biāo)也起作用。對(duì)舞臺(tái)起作用的有兩個(gè)監(jiān)聽,在“控制條_滑塊”這一塊中有:

stage.addEventListener(MouseEvent.MOUSE_UP,hklk);//意思為當(dāng)在舞臺(tái)上松開鼠標(biāo)則起作用

怎么改?我們先讓他不出現(xiàn),即剪切掉。讓他在單擊了按鈕之后起作用,所以把他放在hkax函數(shù)中:

function hkax(event:MouseEvent) {
stage.addEventListener(MouseEvent.MOUSE_UP,hklk);

pd=true;
hk_mc.startDrag(false,fk);
sykz.stop();

}

松開鼠標(biāo)要?jiǎng)h除他:

function hksk(event:MouseEvent) {
stage.removeEventListener(MouseEvent.MOUSE_UP,hklk);

pd=false;
hk_mc.stopDrag();
sykz=shengyin.play(ztwz);

}

在外部釋放以后也讓他刪除:
function hklk(event:MouseEvent) {
stage.removeEventListener(MouseEvent.MOUSE_UP,hklk);

pd=false;
hk_mc.stopDrag();
sykz.stop();
sykz=shengyin.play(ztwz);
}
③(59講)第3個(gè)問題是加載進(jìn)度條有時(shí)候正加載就消失了。在wchs中加個(gè)卸載:

function wchs(event:Event) {
sywj.removeEventListener(Event.COMPLETE,wchs);

//trace("加載完成了");
jdt_mc.visible=false;

}

④(60講)第4個(gè)問題是當(dāng)播放頭不在100%的時(shí)候,拖動(dòng)滑塊后滑塊有彈回當(dāng)前位置。

把jzzhs函數(shù)function jzzhs(event:ProgressEvent) {

var jzjd:Number=Math.round((sywj.bytesLoaded/event.bytesTotal)*100);

.....

} 中var jzjd:Number拷貝到最前作成全局變量即:var jzjd:Number; 而在函數(shù)中用jzjd代替var jzjd:Number即:

jzjd=Math.round((sywj.bytesLoaded/event.bytesTotal)*100);

在滑塊按下hkax函數(shù)中加if(jzjd==100){}:

function hkax(event:MouseEvent) {
stage.addEventListener(MouseEvent.MOUSE_UP,hklk);

if(jzjd==100){

pd=true;
hk_mc.startDrag(false,fk);

}
sykz.stop();

}

測(cè)試:未加載到100%,還可以拖動(dòng)。原因是還有一個(gè)滑道沒設(shè)置。所以要在滑道按下hdax函數(shù)中增加判斷語(yǔ)句:

function hdax(event:MouseEvent) {

if (jzjd==100) {

pd=true;

sykz.stop();

if (mouseX<(hd_mc.width -hk_mc.width)+hd_mc.x) {

hk_mc.x=mouseX;

} else {

hk_mc.x=(hd_mc.width -hk_mc.width)+hd_mc.x;

}

ztwz=zcd*(hk_mc.x-hd_mc.x)/(hd_mc.width -hk_mc.width);

} else {

ztwz=sykz.position; //播放頭停在當(dāng)前位置

sykz.stop();

}

}

十三、完整代碼:

//---------聲明----------------

var gqsz:Array=new Array();//歌曲數(shù)組

var gqsy:int=new int();//歌曲索引

var dizhi:URLRequest=

new URLRequest("http://www./xszy/bjfc/200306wwj/music/myq.mp3");//歌曲地址

var sywj:Sound; //聲音文件

var liu:SoundLoaderContext=new SoundLoaderContext(10000,true);//聲明流,緩沖用

var sykz:SoundChannel=new SoundChannel();//聲音控制

var ztwz:Number;//暫停位置

var jzjd:Number;//加載進(jìn)度

//------------初始化------------------

//也可以這樣

gqsz=["http://www./xszy/bjfc/200306wwj/music/myq.mp3","http://www./xszy/bjfc/200306wwj/music/myq.mp3",]

gqsz[0]="http://www1./uploadfile/2009-4/20094118445463509.mp3";

gqsz[1]="HTTP://blog.linziedu.net/user1/1346/upload/20077124479.mp3";

gqsz[2]="http://news./site1/20100612/005056c000080d7d663224.mp3";

gqsz[3]="http://storage./items/5739916E4F91E638!1000?filename=%E6%AF%9B%E9%98%BF%E6%95%8F%E6%AD%8C%E6%9B%B218%E9%A6%96.mp3";

gqsz[4]="http://www./xszy/bjfc/200306wwj/music/myq.mp3";

gqsz[5]="http://winner./music/mp3/qingzanggaoyuan.mp3";

gqsz[6]="http://58.213.127.41/web/201013154293470/upload/20103685712670.mp3";

gqsy=0;

cbf(); //初始播放

function cbf() {

sywj=new Sound();

dizhi.url=gqsz[gqsy];

sywj.load(dizhi,liu);

sykz=sywj.play();

sywj.addEventListener(Event.OPEN,kshs);//開始加載偵聽

sywj.addEventListener(ProgressEvent.PROGRESS,jzzhs);//正在加載偵聽

sywj.addEventListener(Event.COMPLETE,wchs);//完成加載偵聽

sywj.addEventListener(IOErrorEvent.IO_ERROR,cchs);//出錯(cuò)偵聽

}

jdt_mc.visible=false; //初始化進(jìn)度條不可見

//-----------加載過程------------------

function kshs(event:Event) {

//trace("開始加載了");

jdt_mc.visible=true;

}

function jzzhs(event:ProgressEvent) {

jzjd=Math.round((sywj.bytesLoaded/sywj.bytesTotal)*100);

if (jzjd) {

jd_txt.text="加載了:"+jzjd+"%";

jdt_mc.gotoAndStop(jzjd);

} else {

jd_txt.text="加載了:"+0+"%";

jdt_mc.gotoAndStop(1);

}

}

function wchs(event:Event) {

sywj.removeEventListener(Event.COMPLETE,wchs);

//trace("加載完成了");

jdt_mc.visible=false;

//jd_txt.visible=false;//該句為老虎所加

}

function cchs(event:IOErrorEvent) {

trace("出錯(cuò)了");

}

//---------聲音控制------------

tz_btn.addEventListener(MouseEvent.CLICK,tzhs);//停止按鈕偵聽

bf_btn.addEventListener(MouseEvent.CLICK,bfhs);//播放按鈕偵聽

zt_btn.addEventListener(MouseEvent.CLICK,zths);//暫停按鈕偵聽

function tzhs(event:MouseEvent) {

ztwz=0;

sykz.stop();

}

function bfhs(event:MouseEvent) {

sykz.stop();

sykz=sywj.play(ztwz); //從暫停位置開始播放

}

function zths(event:MouseEvent) {

ztwz=sykz.position; //暫停位置為當(dāng)前位置

sykz.stop();

}

//-----控制條_滑塊------------------

var shang=hk_mc.y;//上

var zuo=hd_mc.x;//左

var xia=0;//下

var you=hd_mc.width-hk_mc.width;//右

var fk:Rectangle=new Rectangle(zuo,shang,you,xia);//滑塊拖動(dòng)范圍

var zcd;//總播放

var bfb;//百分比

var pd=false;//判斷

hk_mc.buttonMode=true;//將鼠標(biāo)變?yōu)槭种割^形狀

hk_mc.addEventListener(MouseEvent.MOUSE_DOWN,hkax);//當(dāng)鼠標(biāo)按下滑塊時(shí)偵聽

hk_mc.addEventListener(MouseEvent.MOUSE_UP,hksk);//當(dāng)鼠標(biāo)松開滑塊時(shí)偵聽

stage.addEventListener(Event.ENTER_FRAME,cfzx);//對(duì)舞臺(tái)偵聽(cfzx:重復(fù)執(zhí)行)

function hkax(event:MouseEvent) {

stage.addEventListener(MouseEvent.MOUSE_UP,hklk);

if (jzjd==100) {

pd=true;

hk_mc.startDrag(false,fk);

}

sykz.stop();

}

function hksk(event:MouseEvent) {

stage.removeEventListener(MouseEvent.MOUSE_UP,hklk);

pd=false;

hk_mc.stopDrag();

sykz=sywj.play(ztwz);

}

function hklk(event:MouseEvent) {

stage.removeEventListener(MouseEvent.MOUSE_UP,hklk);

pd=false;

hk_mc.stopDrag();

sykz.stop();

sykz=sywj.play(ztwz);

}

function cfzx(event:Event) {

//cfzx:重復(fù)執(zhí)行;

zcd=sywj.length/(sywj.bytesLoaded/sywj.bytesTotal);

bfb=sykz.position/zcd;

if (pd) {

ztwz=zcd*(hk_mc.x-hd_mc.x)/(hd_mc.width -hk_mc.width);

} else {

if (zcd) {

hk_mc.x=bfb*(hd_mc.width -hk_mc.width)+hd_mc.x;

} else {

hk_mc.x=hd_mc.x;

}

}

}

//---------控制條_滑道-------

hd_mc.buttonMode=true;//將鼠標(biāo)變?yōu)槭种割^形狀

hd_mc.addEventListener(MouseEvent.MOUSE_DOWN,hdax);//當(dāng)鼠標(biāo)按下滑道時(shí)偵聽

hd_mc.addEventListener(MouseEvent.MOUSE_UP,hdsk);//當(dāng)鼠標(biāo)松開滑道時(shí)偵聽

function hdax(event:MouseEvent) {

if (jzjd==100) {

pd=true;

sykz.stop();

if (mouseX<(hd_mc.width -hk_mc.width)+hd_mc.x) {

hk_mc.x=mouseX;

} else {

hk_mc.x=(hd_mc.width -hk_mc.width)+hd_mc.x;

}

ztwz=zcd*(hk_mc.x-hd_mc.x)/(hd_mc.width -hk_mc.width);

} else {

ztwz=sykz.position;

sykz.stop();

}

}

function hdsk(event) {

pd=false;

sykz.stop();

sykz=sywj.play(ztwz);

}

//-------多首歌曲--------

ss_btn.addEventListener(MouseEvent.CLICK,sshs);//當(dāng)鼠標(biāo)按下上首(ss)按鈕時(shí)偵聽

xs_btn.addEventListener(MouseEvent.CLICK,xshs);//當(dāng)鼠標(biāo)按下下首(xs)按鈕時(shí)偵聽

function sshs(event) {

sykz.stop();

/*if(gqsy>0){

gqsy--;

}else{

gqsy=gqsz.length-1;

}

*/

//另一種寫法:

gqsy=(gqsy>0)?gqsy-1:gqsy=gqsz.length-1;

//trace(gqsy);

cbf();

}

function xshs(event) {

sykz.stop();

/*if(gqsy<gqsz.length-1){

gqsy++;

}else{

gqsy=0;

}

*/

//另一種寫法:

gqsy=(gqsy<gqsz.length-1)?gqsy+1:0;

trace(gqsy);

cbf();

}

//-----循環(huán)播放控制----------------------

xh_mc.buttonMode=true;//將鼠標(biāo)變?yōu)槭种割^形狀

addEventListener(Event.ENTER_FRAME,xhhs);//偵聽

xh_mc.addEventListener(MouseEvent.CLICK,xhhs);//當(dāng)鼠標(biāo)按下循環(huán)按鈕時(shí)偵聽

function xhhs(event) {

if (int(bfb*100)==99) {

sykz.stop();

gqsy=(gqsy<gqsz.length-1)?gqsy+1:0;

cbf();

}

//trace(int(bfb*100));

}

function djhs(event) {

if (xh_mc.currentFrame==3) {

removeEventListener(Event.ENTER_FRAME,xhhs);

xh_mc.gotoAndStop(1);

} else {

xh_mc.gotoAndStop(3);

addEventListener(Event.ENTER_FRAME,xhhs);

}

}

//---------單曲循環(huán)---------

dq_mc.addEventListener(MouseEvent.CLICK,dqdjhs);//單曲點(diǎn)擊函數(shù)(dqdjhs)

function dqhs(event) {

if (int(bfb*100)==99) {

sykz.stop();

gqsy=0;

cbf();

}

}

function dqdjhs(event) {

if (dq_mc.currentFrame==2) {

removeEventListener(Event.ENTER_FRAME,dqhs); //卸載偵聽

dq_mc.gotoAndStop(1);

} else {

dq_mc.gotoAndStop(2);

addEventListener(Event.ENTER_FRAME,dqhs); //開始偵聽

}

}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文字幕亚洲视频一区二区| 亚洲第一视频少妇人妻系列| 中国美女草逼一级黄片视频 | 日本一区不卡在线观看| 日韩少妇人妻中文字幕| 亚洲中文在线男人的天堂| 亚洲日本中文字幕视频在线观看 | 国产精品一区二区三区激情| 丰满人妻熟妇乱又伦精另类视频 | 国产又粗又长又大高潮视频| 婷婷色网视频在线播放| 日本精品啪啪一区二区三区| 好吊一区二区三区在线看| 国产又色又爽又黄又大| 91精品欧美综合在ⅹ| 国产一区二区在线免费| 日韩黄色大片免费在线| 91欧美一区二区三区| 亚洲国产精品久久琪琪| 欧美日韩亚洲精品在线观看| 日韩av欧美中文字幕| 亚洲熟妇av一区二区三区色堂| 国内精品一区二区欧美| 亚洲伦片免费偷拍一区| 国产成人精品在线播放| 国产午夜精品美女露脸视频| 精品人妻久久一品二品三品 | 黄色三级日本在线观看| 婷婷开心五月亚洲综合| 大伊香蕉一区二区三区| 我想看亚洲一级黄色录像| 日本中文在线不卡视频| 不卡一区二区在线视频| 午夜直播免费福利平台| 99免费人成看国产片| 99久久精品午夜一区二区| 国产精品刮毛视频不卡| 激情视频在线视频在线视频| 成人午夜视频精品一区| 又大又长又粗又黄国产| 国产精品丝袜美腿一区二区|