在MIDP应用程序中播放声音
动
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方法判定彩球的
- 采用DSP的声音采集系统硬件原理及设计(04-28)
- MPEG声音编码的单片DSP实现(01-10)
- MPEG声音编码系统的单片DSP实现(03-05)
- 基于DSP的声音采集系统硬件设计方案(05-04)
- 基于DSP的车辆碰撞声检测装置的设计 (08-29)
- 指纹/人脸/虹膜/心率/声音识别各有啥特点?(06-03)