雷霆战机开发文档.docx
- 文档编号:10010386
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:12
- 大小:18.99KB
雷霆战机开发文档.docx
《雷霆战机开发文档.docx》由会员分享,可在线阅读,更多相关《雷霆战机开发文档.docx(12页珍藏版)》请在冰豆网上搜索。
雷霆战机开发文档
一.Logo界面的开发及设置
1.定义LogoActivity,并继承Activity
2.在res里的layout下创立logo.xml
3.在logo.xml里添加一张图片,图片名称为logo1
4.在LogoActivity重写onCreate方法,并将设置自定义界面
setContentView(R.layout.logo);
5.新建一个ImageViewimg_logo对象用来存储图片logo1
img_logo=(ImageView)findViewById(R.id.imlogo);
6.新建一个Handlerh用来控制logo界面图片的切换,2秒切换一张图片然后跳转到main页面
h.postDelayed(r,2000);
Intentintent=newIntent();intent.setClass(LogoActivity.this,MainActivity.class);startActivity(intent);
二.Main界面的开发及设置
1.定义MainActivity,并继承Activity
2.在res里的layout下创立activity-main.xml
3.在activity-main.xml里添背景图片b1,并添加按钮button1设置onclick方法
4.在MainActivity写button1的onclick方法实现页面的跳转
publicvoidoo(Viewv)
5.定义Musicmusic对象添加音乐并播放
AssetFileDescriptorfd=getResources().openRawResourceFd(R.raw.menubg);
music.play(fd);
music.start();
3.Menu界面的开发及设置
1.定义MenuActivity,并继承Activity
2.新建menu.xml,设置背景图片background1,并添加三个ImageView进行操作的控制
3.新建三个ImageView对象img_game,img_shezhi,img_over获取menu.xml中的三个ImageView对象
img_game=(ImageView)findViewById(R.id.begin);
img_shezhi=(ImageView)findViewById(R.id.shezhi);
img_over=(ImageView)findViewById(R.id.over);
4.为三个ImageView对象设置ontouch方法进行操作的实现
img_game.setOnTouchListener(newOnTouchListener()
img_shezhi.setOnTouchListener(newOnTouchListener()
img_over.setOnTouchListener(newOnTouchListener()
5.新建Musicmusic实现菜单音乐的播放与关闭
AssetFileDescriptor
fd=getResources().openRawResourceFd(R.raw.gamebg0)
music.play(fd);
music.start();
6.重写onkeyDown方法,实现2次按下返回键退出菜单页面
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(keyCode==KeyEvent.KEYCODE_BACK){
if((System.currentTimeMillis()-time)>2000){
Toast.makeText(getApplicationContext(),"再按一次退出程序",Toast.LENGTH_SHORT).show();
time=System.currentTimeMillis();
}else{
finish();
music.stop();
}
returntrue;
}
returnsuper.onKeyDown(keyCode,event);
}
4.GameMusicActivity界面的开发及设置
1.定义GameMusicActivity,并继承Activity
2.新建gamemusic.xml,并添加三个CheckBox
3.在AndroidManifest.xml中设置
android:
name=".GameMusicActivity"
android:
theme="@android:
style/Theme.Dialog"
实现GameMusicActivity为对话框式的Activity
4.去掉GameMusicActivity的标题,实现代码为
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
5.设置GameMusicActivity自定义界面
setContentView(R.layout.gamemusic);
6.新建三个CheckBox对象,获取gamemusic.xml中的三个单选框
music=(CheckBox)findViewById(R.id.checkBox1);
bullet=(CheckBox)findViewById(R.id.checkBox2);
bomb=(CheckBox)findViewById(R.id.checkBox3);
7.为三个CheckBox添加监听器实现三中音效的选择
music.setOnCheckedChangeListener
bullet.setOnCheckedChangeListener
bomb.setOnCheckedChangeListener
5.GameActivity界面的开发及设置
1.定义GameActivity,并继承Activity
2.创建GameView,并继承View
3设置GameMusicActivity自定义界面
GameViewgame=newGameView(this);
setContentView(game);
4.在GameView中实现GameActivity的各种页面布局
6.GameView的主要方法设置
1、绘制向下背景图片
1、建一个GameView类,该类继承View,实现Runnable接口,重写onDraw方法
2、定义一个Bitmap图片类存放背景图片
3、定义一个int类型表示背景移动的速度speed
4、定义一个控制背景的y轴坐标
5、在构造方法中加载背景图片
backMap=BitmapFactory.decodeResource();
6、创建一个缩放的游戏位图,指定宽和高。
backMap=Bitmap.createScaledBitmap(backMap,GameActivity.ScreenW,
GameActivity.ScreenH,true);
//获得屏幕宽高
DisplayMetricsmetrics=newDisplayMetrics();
getWindowManager().getDefaultDisplay().
getMetrics(metrics);
ScreenW=metrics.widthPixels;
ScreenH=metrics.heightPixels;
7、在onDraw中画背景图片
canvas.drawBitmap(backMap,0,-backMap.getHeight()+mapY,null);//隐藏在屏幕上端的
canvas.drawBitmap(backMap,0,mapY,null);//显示的
8、在run方法中写一个死循环不断的去改变mapY的速度
while(flag){
mapY+=speed;
postInvalidate();//再次调用重绘
//判断如果大于的屏幕的高度重置0
if(mapY>=GameActivity.ScreenH){
mapY=0;
}
try{
Thread.sleep(100);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
2、绘制可移动的战机
1、加载战机图片
planeMap=BitmapFactory.decodeResource();
2、定义一个战机类MyPlane
1、通过构造函数传递飞机的图片(为后期画子弹准备)
2、在构造方法中指定飞机的初始位置。
x轴居中:
x=(GameActivity.ScreenW-planeMap.getWidth())/2;
y抽自定义y=GameActivity.ScreenH-planeMap.getHeight()*2;
3、定义一个画飞机的方法
publicvoiddrawPlane(Canvascanvas){
canvas.drawBitmap(bitmap,x,y,null);
}
4、在onDraw方法中调用drawPlane方法传递Canvas参数
3、在GameView重写onTouchEvent方法。
得到当前的触摸的状态以及坐标
//定义如下的全局变量记录触摸的状态
inttouchCode=1;
floatx,y;
touchCode=event.getAction();
x=event.getX();
y=event.getY();
returntrue;
4、在Plane类中添加一个改变飞机位置的方法
定义飞机的偏移坐标
floatdx,dy;
intplane_speed=20;//战机的移动速度
publicvoidupdatePlane(floatnew_x,floatnew_y){
//计算偏移量的公式
dx=speed*(new_x-x)/(Math.abs(new_x-x)+Math.abs(new_y-y));
dy=speed*(new_y-y)/(Math.abs(new_x-x)+Math.abs(new_y-y));
x+=dx;
y+=dy;
}
5、在GameView方法中加入一个update方法,加入如下代
码。
在run函数中调用该方法。
//判断当前的触摸状态调用更新飞机位置的方法
if(touchCode==MotionEvent.ACTION_DOWN
||touchCode==MotionEvent.ACTION_MOVE){
plane.updatePlane(touch_x,touch_y);
}
3、绘制随机向下移动的敌机
1、加载敌机图片
2、创建一个敌机类Enemy定义如下变量
floatxy;
intenemy_speed=15;
Randomran=newRandom();
3、在其构造函数中写如下代码
1、得到加载的图片
2、设置敌机的x和y的初始坐标
x=r.nextInt(GameActivity.screenW-enemy_map.getWidth());
y=-enemy_map.getHeight();
4、定义一个绘制敌机的方法
publicvoiddrawEnemy(Canvascanvas){
canvas.drawBitmap(bitmap,x,y,null);
}
4、绘制多个敌机
1、定义一个存放敌机的集合
ArrayList
2、敌机增加的定时器在update方法添加如下代码
inttime=0;
time++;
if(time%20==0){
enemyList.add(newEnemy(enyBitmap));
}
3、在onDraw方法中绘制多个敌机
for(inti=0;i enemyList.get(i).drawEnemy(canvas); } 4、在update方法中循环绘更新敌机的位置 for(inti=0;i enemyList.get(i).updateEnemy(); //判断如果敌机的坐标消失在屏幕上则移除 if(enemyList.get(i).y>GameActivity.ScreenH+enyBitmap.getHeight()){ enemyList.remove(i); } } 5、碰撞爆炸效果(敌机和战机) 1、判断战机和敌机是否相撞 1、在战机和敌机中都加入一个矩形属性RectF 2、在设置初始的位置的时候都给矩形设置值 rectF_emey.top=y; rectF_emey.bottom=y+emey_map.getHeight(); rectF_emey.left=x; rectF_emey.right=x+emey_map.getWidth(); 3、在改变位置的时候,也需要设置 4、在循环改变敌机位置的时候去判断战机和敌机的矩形是否有交集。 如果有交集的话则在爆炸的集合中添加一个爆炸类 if(enemyList.get(i).rectF_enemy.intersect(plan.rectF_plane)){ expList.add(newBaozha(expBits,enemyList.get(i).x,enemyList.get(i).y,this)); enemyList.remove(i); } 2、加载爆炸效果的图片 3、对爆炸效果的图片进行分割,放到一个Bitmap数组中 //计算每张图片的宽度 intexpW=0; Bitmap[]expBits=newBitmap[6]; expW=map_bz.getWidth()/expBits.length; for(inti=0;i expBits[i]=Bitmap.createBitmap(map_bz,expW*i,0,expW,map_bz.getHeight()); } 4、定义一个爆炸类,其构造方法接收四个参数 ArrayList Bitmap[]maps; floatx,y; intindex; 5、在爆炸类中有一个方法绘制爆炸图片 if(index canvas.drawBitmap(maps[index],x,y,null); index++; }else{ index=0; list.remove(this); } 6、在GameView中画出爆炸图片 //定义一个爆炸效果的集合 publicArrayList //循环画出爆炸效果 for(inti=0;i expList.get(i).drawBaozha(canvas); } 7、在判断是否有碰撞的地方添加爆炸效果 如果有交集的话则在爆炸的集合中添加一个爆炸类 if(enemyList.get(i).rectF_enemy.intersect(plan.rectF_plane)){ expList.add(newBaozha(expBits,enemyList.get(i).x,enemyList.get(i).y,this)); enemyList.remove(i); } 6、战机发射子弹 1、加载子弹图片 2、创建一个子弹类Bullet,需要的属性如下: privateBitmapmap_bull; privatefloatplane_width; privatefloatx,y; privateintspeed=15; privateRectFrectf=newRectF(); 3、在构造函数对初始化属性,以及设定x和y的值 this.x=x+(plane_width-map_bull.getWidth())/2; this.y=y-map_bull.getHeight(); 4、创建一个绘制子弹的方法 canvas.drawBitmap(map_bull,x,y,null); 5、添加一个更新子弹位置的方法 y-=speed; 6、设定一个时间间隔,添加一个子弹 if(time%5==0){ bulletList.add(newBullet(map_zd,plan.getX(),plan.getY(),plane.getWidth())); } 7、在Gameview中onDraw方法中循环画子弹 添加一个放子弹的集合 ArrayList for(inti=0;i bulletList.get(i).drawBullet(canvas); bulletList.get(i).updateBullet(); } 8、判断子弹是否和敌机相撞,如果相撞则敌机爆炸 aa: for(inti=0;i for(intj=0;j if(enemy_list.get(i).getRectF_emey() .intersect(bullet_list.get(j).getRectF_bull())){ baozha_list.add(newBaozha(baozha_maps, enemy_list.get(i).getX(), enemy_list.get(i).getY(),baozha_list)); //分别移除敌机和子弹 enemy_list.remove(i); bullet_list.remove(j); breakaa; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 雷霆 战机 开发 文档