新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在MIDP應(yīng)用程序中播放聲音

在MIDP應(yīng)用程序中播放聲音

作者: 時(shí)間:2012-05-07 來源:網(wǎng)絡(luò) 收藏

if(block[i][j]){

g.drawImage(

blockImg,

i*BLOCK_WIDTH,

(j+1)*BLOCK_HEIGHT,

Graphics.LEFT|Graphics.TOP);

}

}

}

ex.6

接著查看球和小棒。在paint方法中有以下敘述。(ex.7)

//查看球

g.drawImage(ballImg,ballX,ballY,Graphics.LEFT|Graphics.TOP);

//查看小棒

g.drawImage(barImg,barX,barY,Graphics.LEFT|Graphics.TOP);

ex.7

圖片安裝完成后出現(xiàn)如下畫面。

4.使圖片運(yùn)動(dòng)

接下來使用線程和按鍵事件移動(dòng)球和小棒。為了使用線程就得在AudioCanvas類中安裝Runnable接口、記述run方法。使用球和小棒定義的移動(dòng)速度分別變化球和小棒的坐標(biāo)。此外,小棒的移動(dòng)速度根據(jù)按鍵處理而變化。以下記述了run方法。(ex.8)

/**

*線程的運(yùn)行處理

*/

publicvoidrun(){

while(state==ACTIVE){

moveBall();//使球運(yùn)動(dòng)

moveBar();//移動(dòng)小棒

repaint();//再次描畫

try{

Thread.sleep(50);

}catch(InterruptedCodeExampleceptione){

e.printStackTrace();

break;

}

}

}

/**

//使球運(yùn)動(dòng)

*/

publicvoidmoveBall(){

ballX+=ballMovCodeExample;

ballY+=ballMoveY;

}

/**

*移動(dòng)小棒

*/

publicvoidmoveBar(){

barX+=barMovCodeExample;

//不能向畫面外移動(dòng)

if(barX0){

barX=0;

}elseif(barX+BAR_WIDTH>getWidth()){

barX=getWidth()-BAR_WIDTH;

}

}

ex.8

以下表示的是按鍵處理。(ex.9)

/*****************************************

*按鍵處理

*****************************************/

/**

*按按鍵時(shí)

*/

protectedvoidkeyPressed(intkey){

if(state==ACTIVE){//正在運(yùn)動(dòng)

if(getGameAction(key)==Canvas.RIGHT){

barMovCodeExample=6;

}elseif(getGameAction(key)==Canvas.LEFT){

barMovCodeExample=-6;

}

repaint();

}else{//停止運(yùn)動(dòng)后

//再次啟動(dòng)

this.initialize();

}

}

/**

*釋放按鍵時(shí)

*/

protectedvoidkeyReleased(intkey){

barMovCodeExample=0;

}

ex.9

5.球的反彈

下面是球的反彈。

球的反彈形式有以下3種。

·碰邊壁后反彈

·碰小棒后反彈

·碰彩球后反彈

記述了每個(gè)moveBall方法。(ex.10)

碰彩球的反彈時(shí)

block[i][j]=false;

blockCount--;

彩球立刻就破碎。彩球破碎后余下的彩球數(shù)量blockCount將有所減少。

另外,球掉落時(shí),改變游戲狀態(tài)后游戲結(jié)束。

/**

//使球運(yùn)動(dòng)

*/

publicvoidmoveBall(){

ballX+=ballMovCodeExample;

ballY+=ballMoveY;

//反彈

//碰邊壁后反彈

if(ballX0){

ballMovCodeExample*=-1;

ballX=0;

}elseif(getWidth()

ballX=getWidth()-BALL_HEIGHT;

ballMovCodeExample*=-1;

}

if(ballY0){

ballMoveY*=-1;

ballY=0;

}elseif(ballY>getHeight()){//球落下后

//游戲結(jié)束

state=GAME_OVER;

}

//碰上小棒后反彈

if(ballY+BALL_HEIGHT>barY

ballX+BALL_WIDTH>barX

ballX

ballMoveY*=-1;

ballY=barY-BALL_HEIGHT;

if(barMovCodeExample0){

ballMovCodeExample-=2;

}elseif(barMovCodeExample>0){

ballMovCodeExample+=2;

}

}

//碰上彩球后反彈

for(inti=0;i

for(intj=0;j

if(block[i][j]){

if(ballX+BALL_WIDTH>i*BLOCK_WIDTH

ballX(i+1)*BLOCK_WIDTH){

if(ballY+BALL_HEIGHT>(j+1)*BLOCK_HEIGHT

ballY(j+2)*BLOCK_HEIGHT){

//清除彩球

block[i][j]=false;

blockCount--;

ballMoveY*=-1;}

}

}

}

}

}

}

ex.10

碰小棒后反彈情況如下所示:向右按鍵時(shí),球就會(huì)讓右方快速移動(dòng),反之,向左按鍵時(shí),球則向左方快速移動(dòng)。(ex.11)

if(barMoveX0){

ballMoveX-=2;

}elseif(barMoveX>0){

ballMoveX+=2;

}

ex.11

·清除檢查

至此安裝完畢游戲就有雛形了。但是,在現(xiàn)在的程序中即使彩球全部消失,游戲也不能清除。那么,球與彩球相撞時(shí),數(shù)出彩球的剩余數(shù)。當(dāng)該數(shù)值為0時(shí),則游戲清除。以下記述的是該處理。(ex.12)

//清除彩球

block[i][j]=false;

blockCount--;

ballMoveY*=-1;

//音效

blockSound.play();

//檢查游戲清除

if(blockCount==0){

state=CLEAR;

}

ex.12

6.音樂

在本講中的泡泡龍游戲的中最好使用BGM和音效。游戲開始的同時(shí)演奏BGM,音效則是球在碰壁、碰小棒反彈時(shí),以及彩球破碎時(shí)才的。

·讀取

用BlockApplication構(gòu)造函數(shù)讀取音樂數(shù)據(jù)。而且,這里的BGM能夠循環(huán)播放,所以可以使用音頻事件處理。(ex.13)



關(guān)鍵詞: 聲音 播放 應(yīng)用程序 MIDP

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉