整体思路
1.在Andriod Studio中新建Java项目用来做我们的《飞机大战》项目;
2.通过MySurfaceView这个类作为主页面来完成整体布局结构的设计和制作;
3.新建一个类,用来设计战斗时的页面背景,通过draw方法和logic方法形成两张背景图循环播放的效果;
4.新建MyPlane类绘制玩家飞机;
5.新建EnemyPlane来绘制敌方BOSS飞机;
6.新建Bullet类来绘制子弹(敌我双方子弹);
7.新建Boom类绘制飞机爆炸效果;
8.新建GameSoundPool类来添加背景、子弹发射、击中目标等音效;
9.整体结构完成后,具体对各个方面做出完善和修改,如:子弹与飞机碰撞,飞机与敌机碰撞等
下面我们来详细分析一下《飞机大战》这个项目:
如何绘制循环滚动的背景图片
首先我们在BackGround中对背景图的坐标,位图进行定义;然后完成它们的构造方法,draw方法和logic方法,方便调用;关于背景图,我采用了两张同样的图片进行循环,对它们的位置进行判断,规定它们的移动速度使它们可以无缝衔合;最后在MySurfaceView中进行实例化调用。
附代码:(关于draw方法和logic方法的片段)
public void draw(Canvas canvas,Paint paint) {
logic();
canvas.drawBitmap(bitmap, 0, y, paint);
canvas.drawBitmap(bitmap, 0, y1, paint);
}
private void logic() {
y += 10;
y1 += 10;
if (y >= MySurfaceView.height) {
y = y1 - bitmap.getHeight();
}
if (y1 >= MySurfaceView.height) {
y1 = y - bitmap.getHeight();
}
}
这是背景图的绘制思路,当然后期会完成对背景图的完善,通过切换背景图实现更换关卡的效果。
绘制玩家飞机
刚开始制作时,我为飞机定义了它的坐标,位图,宽度和高度等,并创建了它的构造方法,draw方法;在MySurfaceView中进行附参和实例化,并调用MyPlane的draw方法使飞机在背景图中显示出来。
完善:在几天的学习过程中,我们对玩家飞机进行了完善和修改。完善有如下几点:
1.我们给飞机添加了血量hp
2.我们设计onTouchEvent方法移动飞机,监听屏幕 ,实现手指移动飞机
3.为飞机做出被子弹击中后闪烁无敌效果
附代码:(关于touchEvent和isCollision方法的代码片段)
public void touchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
float ex = event.getX();
float ey = event.getY();
if (ex > x && ex < width + x && ey > y && ey < height + y) {
x = (int) ex - width / 2