基于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等进行边界判断,碰撞判断等逻辑判断,对超出屏幕范围的子弹、飞机,道具等属性对象进行置空来释放内存。飞机和碰撞的特效的逻辑处理实现代码如下: |