新聞中心

        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)閉
        主站蜘蛛池模板: 民勤县| 电白县| 个旧市| 环江| 印江| 铁岭县| 建阳市| 洛扎县| 康平县| 长治县| 黄山市| 富民县| 德惠市| 南丰县| 安吉县| 天等县| 阳朔县| 昌乐县| 嵊州市| 静海县| 遵义县| 北流市| 海门市| 瑞安市| 克拉玛依市| 肃南| 平乐县| 达拉特旗| 大新县| 大厂| 鹿邑县| 毕节市| 双辽市| 沂水县| 堆龙德庆县| 开化县| 丽水市| 泰宁县| 鹤山市| 淅川县| 宁波市|