微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 在MIDP应用程序中播放声音

在MIDP应用程序中播放声音

时间:05-07 来源:互联网 点击:

moveBar();//移动小棒

repaint();//再次描画

try{

Thread.sleep(50);

}catch(InterruptedCodeExampleceptione){

e.printStackTrace();

break;

}

}

}

/**

//使球运动

*/

publicvoidmoveBall(){

ballX+=ballMovCodeExample;

ballY+=ballMoveY;

}

/**

*移动小棒

*/

publicvoidmoveBar(){

barX+=barMovCodeExample;

//不能向画面外移动

if(barX0){

barX=0;

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

barX=getWidth()-BAR_WIDTH;

}

}

ex.8

以下表示的是按键处理。(ex.9)

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

*按键处理

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

/**

*按按键时

*/

protectedvoidkeyPressed(intkey){

if(state==ACTIVE){//正在运动

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

barMovCodeExample=6;

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

barMovCodeExample=-6;

}

repaint();

}else{//停止运动后

//再次启动

this.initialize();

}

}

/**

*释放按键时

*/

protectedvoidkeyReleased(intkey){

barMovCodeExample=0;

}

ex.9

5.球的反弹

下面是球的反弹。

球的反弹形式有以下3种。

·碰边壁后反弹

·碰小棒后反弹

·碰彩球后反弹

记述了每个moveBall方法。(ex.10)

碰彩球的反弹时

block[i][j]=false;

blockCount--;

彩球立刻就破碎。彩球破碎后余下的彩球数量blockCount将有所减少。

另外,球掉落时,改变游戏状态后游戏结束。

/**

//使球运动

*/

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()){//球落下后

//游戏结束

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

碰小棒后反弹情况如下所示:向右按键时,球就会让右方快速移动,反之,向左按键时,球则向左方快速移动。(ex.11)

if(barMoveX0){

ballMoveX-=2;

}elseif(barMoveX>0){

ballMoveX+=2;

}

ex.11

·清除检查

至此安装完毕游戏就有雏形了。但是,在现在的程序中即使彩球全部消失,游戏也不能清除。那么,球与彩球相撞时,数出彩球的剩余数。当该数值为0时,则游戏清除。以下记述的是该处理。(ex.12)

//清除彩球

block[i][j]=false;

blockCount--;

ballMoveY*=-1;

//播放音效

blockSound.play();

//检查游戏清除

if(blockCount==0){

state=CLEAR;

}

ex.12

6.音乐播放

在本讲中的泡泡龙游戏的应用程序中最好使用BGM和音效。游戏开始的同时演奏BGM,音效则是球在碰壁、碰小棒反弹时,以及彩球破碎时才播放的。

·读取

用BlockApplication构造函数读取音乐数据。而且,这里的BGM能够循环播放,所以可以使用音频事件处理。(ex.13)

//声音数据的读取

bgm=Media.getAudioClip(/bgm.mid);//背景音乐

ballSound=Media.getAudioClip(/ball.mid);//球反弹后的音效

blockSound=Media.getAudioClip(/block.mid);//球破碎的音效

bgm.addAudioListener(this);//增加AudioListener

ex.13

·播放

读取音乐数据后,接下来进行播放。BGM在游戏开始的同时能够播放,所以在AudioCanvas类的start方法中记述播放处理并能够播放出来。

球的音效:用moveBall方法进行下面反弹判断时,能够播放音效。(ex.14)

//反弹

//碰边壁后反弹

if(ballX0){

ballMoveX*=-1;

ballX=0;

//播放音效

ballSound.play();

}elseif(getWidth()

ballX=getWidth()-BALL_HEIGHT;

ballMoveX*=-1;

//播放音效

ballSound.play();

}

if(ballY0){

ballMoveY*=-1;

ballY=0;

//播放音效

ballSound.play();

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

//游戏结束

state=GAME_OVER;

}

//碰上小棒反弹

if(ballY+BALL_HEIGHT>barY

ballX+BALL_WIDTH>barX

ballX

ballMoveY*=-1;

ballY=barY-BALL_HEIGHT;

if(barMoveX0){

ballMoveX-=2;

}elseif(barMoveX>0){

ballMoveX+=2;

}

//播放音效

ballSound.play();

}

ex.14

彩球的音效:用moveBall方法判定彩球的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top