在MIDP應(yīng)用程序中播放聲音
}
/**
*描繪處理
*/
protectedvoidpaint(Graphicsg){
g.setColor(255,255,255);
g.fillRect(0,0,getHeight(),getWidth());
g.setColor(0,0,0);
g.drawString(MusicPlay?,50,52,Graphics.TOP|Graphics.LEFT);
g.drawString(
channel=+a.getChannel(),
30,
64,
Graphics.TOP|Graphics.LEFT);
g.drawString(
lapsedtime=+a.getLapsedTime(),
30,
76,
Graphics.TOP|Graphics.LEFT);
g.drawString(
tempo=+a.getTempo(),
30,
88,
Graphics.TOP|Graphics.LEFT);
g.drawString(
time=+a.getTime(),
30,
100,
Graphics.TOP|Graphics.LEFT);
}
/**
*命令事件的處理
*/
publicvoidcommandAction(Commandc,Displayabled){
System.out.println(test);
if(c.equals(START)){
a.play();
}elseif(c.equals(STOP)){
a.stop();
}
}
/**
*線程的處理
*刷新查看
*/
publicvoidrun(){
while(true){
repaint();
try{
Thread.sleep(500);
}catch(Exceptione){
}
}
}
}
ex.2
接受表示音樂(lè)播放結(jié)束的事件后,根據(jù)明確的開(kāi)始播放音樂(lè)菜單可以無(wú)限循環(huán)地播放音樂(lè)。下面的演示詳細(xì)記述了上述例子中的audioAction方法,能夠?qū)崿F(xiàn)無(wú)限循環(huán)播放。(ex.3)
/**
*音頻事件的處理
*/
publicvoidaudioAction(AudioClipsound,intevent,intparam){
if(sound==a){
if(event==AudioListener.AUDIO_COMPLETE){
sound.play();
}
}
}
ex.3
接下來(lái)制作實(shí)際的發(fā)聲應(yīng)用程序。
本講中制作的是簡(jiǎn)單的“泡泡龍”游戲。
■游戲方法
移動(dòng)小棒接住反彈的球使其不掉下去,使上方的彩球逐漸消失的游戲。彩球完全消失并清除后,球再落下則此游戲通過(guò)。
■準(zhǔn)備工作
準(zhǔn)備游戲必備的圖片和音效。
準(zhǔn)備以下圖片。
圖1球的圖片
圖2小棒的圖片
圖3彩球的圖片
·背景音樂(lè)(bgm.mid)
·球反彈時(shí)的音效(ball.mid)
·彩球破碎時(shí)的音效(block.mid)
■設(shè)計(jì)
以下是狀態(tài)連接圖(4)
本講中為了簡(jiǎn)單化,在啟動(dòng)應(yīng)用程序的同時(shí)立刻就啟動(dòng)游戲。形成游戲開(kāi)始、球落下后游戲結(jié)束、全部清除彩球后游戲過(guò)關(guān)。
Figure4
■制作應(yīng)用程序
現(xiàn)在我們按照以下順序制作應(yīng)用程序。
1.類(lèi)結(jié)構(gòu)
2.變量、常量的定義
3.查看圖片和音效
4.使圖片運(yùn)動(dòng)
5.球的反彈
6.音樂(lè)的播放
1.類(lèi)結(jié)構(gòu)
下表內(nèi)容是類(lèi)結(jié)構(gòu)。(表5)
表5
2.變量、常量的定義
將下面的應(yīng)用變量、定量作為BlockCanvas例子的屬性并定義。(ex.4)
//狀態(tài)設(shè)定
privateintstate;//狀態(tài)
privatefinalintACTIVE=1;
privatefinalintGAME_OVER=2;
privatefinalintCLEAR=3;
//彩球的設(shè)定
privatefinalintBLOCK_H=7;//彩球橫向的個(gè)數(shù)
privatefinalintBLOCK_V=5;//彩球縱向的個(gè)數(shù)
privatefinalintBLOCK_WIDTH=getWidth()/BLOCK_H;
privatefinalintBLOCK_HEIGHT=BLOCK_WIDTH/2;
privatebooleanblock[][]=newboolean[BLOCK_H][BLOCK_V];
privateintblockCount;//彩球個(gè)數(shù)
//小棒的設(shè)定
privatefinalintBAR_HEIGHT=11;
privatefinalintBAR_WIDTH=23;
privateintbarX=0;
privateintbarY=getHeight()-BAR_HEIGHT;
privateintbarMovCodeExample=0;
//球的設(shè)定
privatefinalintBALL_HEIGHT=10;
privatefinalintBALL_WIDTH=10;
privateintballX;
privateintballY;
privateintballMovCodeExample=5;
privateintballMoveY=5;
privateThreadth;
//畫(huà)面類(lèi)
privateImagebarImg=null;
privateImageballImg=null;
privateImageblockImg=null;
//音效類(lèi)
privateAudioClipbgm;//Backgroundmusic
privateAudioClipballSound;//Soundofbouncingball
privateAudioClipblockSound;//Soundofdestroyingblocks
ex.4
3.查看圖片和音效
查看準(zhǔn)備好的圖片和音效。BlockCanvas的構(gòu)造函數(shù)內(nèi)分別讀取小棒、球、彩球的圖片。(ex.5)
//讀取圖片
try{
barImg=Image.createImage(/bar.png);
ballImg=Image.createImage(/ball.png);
blockImg=Image.createImage(/block.png);
}catch(CodeExampleceptione){
e.printStackTrace();
}
ex.5
能查看讀取后的圖片。
彩球在圖中的分配為橫7縱5,讀取彩球圖片并描畫(huà)在畫(huà)面中。用旗表示彩球的狀態(tài)。保持原來(lái)的排列。將一個(gè)一個(gè)的彩球使用原來(lái)的排列并計(jì)算出坐標(biāo),安排在畫(huà)面中。(ex.6)
//查看彩球
g.setColor(0,0,255);
for(inti=0;i
for(intj=0;j
評(píng)論