雷霆战机开发文档Word下载.docx
《雷霆战机开发文档Word下载.docx》由会员分享,可在线阅读,更多相关《雷霆战机开发文档Word下载.docx(12页珍藏版)》请在冰点文库上搜索。
![雷霆战机开发文档Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/11119405-27af-4f03-9e81-1e0fb1b8015e/11119405-27af-4f03-9e81-1e0fb1b8015e1.gif)
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)
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();
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<
Enemy>
enemyList=newArrayList<
();
2、敌机增加的定时器在update方法添加如下代码
inttime=0;
time++;
if(time%20==0){
enemyList.add(newEnemy(enyBitmap));
3、在onDraw方法中绘制多个敌机
for(inti=0;
i<
enemyList.size();
i++){
enemyList.get(i).drawEnemy(canvas);
4、在update方法中循环绘更新敌机的位置
for(inti=0;
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));
2、加载爆炸效果的图片
3、对爆炸效果的图片进行分割,放到一个Bitmap数组中
//计算每张图片的宽度
intexpW=0;
Bitmap[]expBits=newBitmap[6];
expW=map_bz.getWidth()/expBits.length;
expBits.length;
expBits[i]=Bitmap.createBitmap(map_bz,expW*i,0,expW,map_bz.getHeight());
4、定义一个爆炸类,其构造方法接收四个参数
ArrayList<
Baozha>
list;
Bitmap[]maps;
floatx,y;
intindex;
5、在爆炸类中有一个方法绘制爆炸图片
if(index<
maps.length){
canvas.drawBitmap(maps[index],x,y,null);
index++;
}else{
index=0;
list.remove(this);
6、在GameView中画出爆炸图片
//定义一个爆炸效果的集合
publicArrayList<
expList=newArrayList<
//循环画出爆炸效果
expList.size();
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方法中循环画子弹
添加一个放子弹的集合
Bullet>
bulletList=newArrayList<
bulletList.size();
bulletList.get(i).drawBullet(canvas);
bulletList.get(i).updateBullet();
8、判断子弹是否和敌机相撞,如果相撞则敌机爆炸
aa:
for(inti=0;
enemy_list.size();
for(intj=0;
j<
bullet_list.size();
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;