{$cfg_webname}
主页 > 计算机 > 论文 >

基于Android平台的星际射击游戏的设计与实现(7)

来源:56doc.com  资料编号:5D10234 资料等级:★★★★★ %E8%B5%84%E6%96%99%E7%BC%96%E5%8F%B7%EF%BC%9A5D10234
资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用. 帮助
资料介绍

            }else if(msg.what == -1){
                playerbgstate = -1;
                playerbg.pause();
            }else if(msg.what == 2){
                playerbomstate =2;
                playerbom.start();
            }
        }  
};
5.2.2 游戏主界面类
游戏中的各种动画,各种特效都是在主界面类中实现,主界面类MyView.Java提供画布Canvas,游戏属性类获得Canvas,然后在各自的updateView方法中更新视图以达到图片动态变化的效果。在主界面中,实现Runnable接口,重写Run()方法,作为游戏的主线程,代码如下:
public void run() {
        while (isRun) {
            if(!ispause){
                long startTime = System.currentTimeMillis();
                int TIME_IN_FRAME = 30;
                doSomeThing();           
                synchronized (sHolder) {       
                    //拿到当前画布 然后锁定
                    Canvas mCanvas =sHolder.lockCanvas(null); 
                    updataView(mCanvas);
                    //绘制结束后解锁显示在屏幕上
                    sHolder.unlockCanvasAndPost(mCanvas);
                }
                //取得更新游戏结束的时间
                long endTime = System.currentTimeMillis();
                //计算出游戏一次更新的毫秒数
                int diffTime  = (int)(endTime - startTime);
                if(TIME_IN_FRAME-diffTime>0)
                try {
                    Thread.sleep(TIME_IN_FRAME-diffTime);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                timer++;
            }
在主界面类MyView.Java中还对整个游戏所需要的图片资源进行初始化,以方便各个属性类去实例化属性对象,避免了各个属性类因多次实例化对象而重复加载图片,耗费内存和暂用cpu资源等问题。   
部分代码如下:
public void InitView(){   
    pengzhuang[0]=BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.baozha));   
planeBitmap[0]=BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.enemy2));            paodanBitmap[0]=BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.bullet1));        paodanBitmap[1]=BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.bullet4));
    paodanBitmap[2]=BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.bullet6));
paodanBitmap[3]=BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.bullet7));
paodanBitmap[4]=BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.bullet0));
paodanBitmap[5]=BitmapFactory.decodeStream(getResources().openRawResource(R.drawable.myzd31));   
    }
在MyView.Java中关键是对各个属性类的逻辑处理,在LogicView()函数中,需要对飞机、子弹、道具,Boss等进行边界判断,碰撞判断等逻辑判断,对超出屏幕范围的子弹、飞机,道具等属性对象进行置空来释放内存。飞机和碰撞的特效的逻辑处理实现代码如下:
推荐资料