飞机大战
一.整体实现思路
首先选好背景,然后设置背景,实现两张背景的循环,达成背景的循环滚动。
第二步,加上一个玩家飞机,首先给他赋予初始位置,然后给玩家飞机Touch,实现玩家飞机能按照手指的触摸位置来进行移动。
第三步,Boss飞机,相同的道理,只不过少了触摸移动,在背景的上方给Boss飞机进行判断,实现飞机的左右移动。
第四步,给飞机加上子弹,玩家飞机子弹和boss飞机子弹一样,先创建一个speed给它赋值,是子弹的速度,用speed++进行子弹的加速,再定义一个ISDEAD,进行子弹的判断。
第五步,给子弹加声音,在子弹加声音的时候要先进行判断,判断当子弹撞到飞机时产生的反应,飞机撞到飞机时候的反应,如玩家飞机和Boss飞机的血量都会减少,和玩家飞机会有无敌的效果,然后就是赋予碰撞时的声音。
二.如何绘制循环滚动的背景图片
首先定义图片的y,y1,Bitmap,给这三个值赋予构造方法,然后在逻辑方法中进行判断,给y和y1进行++实现背景的滚动,然后会发现两张背景不会衔接到一起,这时就要换一种判断方法,当第一张图循环结束,把第二张图放在后面继续进行滚动,第一张图立马放到第二张图后面接着循环,这样就会有一种一直在循环的感觉。
下面是背景这一部分的代码:
/**
* 背景
*/
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
public class BackGroud {
private int y1;
private int y2;
private Bitmap bitmap;
public BackGroud(Bitmap bitmap){
this.bitmap = bitmap;
y1 = 0;
y2 = y1-bitmap.getHeight();
}
public void draw(Canvas canvas){
logic();
Paint paint = new Paint();
canvas.drawBitmap(bitmap,0, y1,paint);
canvas.drawBitmap(bitmap,0, y2,paint);
}
public void logic(){ //逻辑方法
y1+=10;
y2+=10;
if(y1>=bitmap.getHeight()){
y1 = y2-bitmap.getHeight(); //移动在第二张上面
}
if(y2>=bitmap.getHeight()){
y2=y1-bitmap.getHeight();
}
}
}
三.如何绘制飞机
首先给飞机定义一个初始位置,在屏幕的底面中间,给飞机X,Y值定义成屏幕的X最下方以及Y的中间,但是飞机并不在屏幕中间,因为这里的XY是飞机和屏幕的左上角的位置,这时的飞机在中间偏右这个位置,所以必须要减去半个飞机的宽度(这里是飞机的宽度,而不是X的一半)才能到达正中心,然后就是给飞机定义一个初始血量Hp为3,其次就是无敌状态,然后用Canvas的方法调用到飞机的图片,最后再在主类中调用Myplane中的draw。
代码如下:
/**
*玩家飞机
*/
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
public class Myplane {
private Bitmap bitmap;
private Bitmap bitmapHp;
private int x, y;
private int width, height;
private boolean noCollision;
private int noCollisionCount;
private