绘制好了 飞机 和子弹

package com.example.android.planegame;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.DisplayMetrics;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Created by Administrator on 2016/7/26.
 */
public class DrawMasterBullet extends BaseDraw {
    /**
     * 子弹合集
     */
    private List<ObjectMasterBullet> listBullets = new ArrayList<ObjectMasterBullet>();
    /**
     * 控制子弹出现的速度
     */
    private int freshCount = 10;
    private int freshNum = 10;
    /**
     * 控制子弹移动的速度
     */
    private int bulletSpeed = 30;

    private Bitmap bitMapBullet = null;
    private int screenWidth = 0;
    private int screenHeigth = 0;
    private Canvas canvas;
    private Rect planeRect;

    public DrawMasterBullet(Context context) {

        if (screenWidth == 0 && screenHeigth == 0) {
            bitMapBullet = BitmapFactory.decodeResource(context.getResources(), R.mipmap.bullet_2);

            Resources resources = context.getResources();
            DisplayMetrics dm = resources.getDisplayMetrics();
            screenWidth = dm.widthPixels;
            screenHeigth = dm.heightPixels;

        }
    }

    @Override
    void onDraw(Canvas canvas) {

    }

    @Override
    void onDestory() {
        bitMapBullet.recycle();
    }

    public void onDraw(Canvas canvas, Rect planeRect) {

        this.canvas = canvas;
        this.planeRect = planeRect;

        if (listBullets.size() > 0) {

            Iterator<ObjectMasterBullet> iter = listBullets.iterator();

            while (iter.hasNext()) {
                ObjectMasterBullet bullet = iter.next();
                if ((bullet.offsetY + screenHeigth) < 0) {
                    //移除屏幕之外的子弹
                    iter.remove();

                } else {
                    Rect rect = new Rect(bullet.x, bullet.y + bullet.offsetY,
                            bullet.x + bitMapBullet.getWidth(), bullet.y + bitMapBullet.getHeight() + bullet.offsetY);

                    canvas.drawBitmap(bitMapBullet, null, rect, null);

                    bullet.offsetY = bullet.offsetY - bulletSpeed;
                }
            }

        }

        if (freshNum == freshCount) {
            addOneBullet();
            freshNum--;
        } else {
            freshNum--;
            if (freshNum < 0) {
                freshNum = freshCount;
            }
        }

    }

    /**
     * 新增一个子弹
     */
    private void addOneBullet() {

        ObjectMasterBullet bullet = new ObjectMasterBullet();
        bullet.x = planeRect.centerX() - planeRect.width() / 12;
        bullet.y = planeRect.top - bitMapBullet.getHeight();

        Rect rect = new Rect(bullet.x, bullet.y,
                bullet.x + bitMapBullet.getWidth(), bullet.y + bitMapBullet.getHeight());

        canvas.drawBitmap(bitMapBullet, null, rect, null);

        listBullets.add(bullet);

    }

}
package com.example.android.planegame;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;

/**
 * Created by Administrator on 2016/7/26.
 */
public class DrawMasterPlane extends BaseDraw {
    private int screenWidth = 0;
    private int screenHeigth = 0;
    /**
     * 主机
     */
    private Bitmap bitmapPlane = null;

    private int planeDist = 0;
    private Rect planeRect = null;
    /**
     * 手指移动偏移量
     */
    private int offsetX = 0;
    private int offsetY = 0;

    public DrawMasterPlane(Context context) {

        if (screenWidth == 0 && screenHeigth == 0) {
            bitmapPlane = BitmapFactory.decodeResource(context.getResources(), R.mipmap.plane_y);

            Resources resources = context.getResources();
            DisplayMetrics dm = resources.getDisplayMetrics();
            screenWidth = dm.widthPixels;
            screenHeigth = dm.heightPixels;

            planeDist = screenWidth / 5;
        }

    }

    @Override
    void onDraw(Canvas canvas) {

        planeRect = new Rect(
                (((screenWidth - planeDist) / 2) + offsetX) > 0 ? Math.min((((screenWidth - planeDist) / 2) + offsetX), screenWidth - bitmapPlane.getWidth()) : 0
                , (screenHeigth - planeDist * 2 + offsetY) > 0 ? Math.min((screenHeigth - planeDist * 2 + offsetY), screenHeigth - bitmapPlane.getHeight()) : 0
                , ((screenWidth + planeDist) / 2 + offsetX) > bitmapPlane.getWidth() ? Math.min((screenWidth + planeDist) / 2 + offsetX, screenWidth) : bitmapPlane.getWidth()
                , (screenHeigth - planeDist + offsetY) > bitmapPlane.getHeight() ? Math.min((screenHeigth - planeDist + offsetY), screenHeigth) : bitmapPlane.getHeight()
        );

        canvas.drawBitmap(bitmapPlane, null, planeRect, null);

    }

    /**
     * 返回飞机的矩形
     */
    public Rect getPlaneRect() {
        return planeRect;
    }

    boolean canMove = false;
    int downX = 0;
    int downY = 0;

    /**
     * 用户手指移动飞机
     */
    public void onTouch(MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:

                downX = (int) event.getX();
                downY = (int) event.getY();
                //判断手指按下的点不在飞机上面  重置
                if (planeRect.contains(downX, downY)) {
                    canMove = true;
                } else {
                    canMove = false;
                }
                break;
            case MotionEvent.ACTION_MOVE:

                int moveX = (int) event.getX();
                int moveY = (int) event.getY();

                if (canMove) {

                    offsetX = offsetX + (moveX - downX);
                    offsetY = offsetY + (moveY - downY);
                }

                downX = moveX;
                downY = moveY;

                break;
            case MotionEvent.ACTION_UP:

                canMove = false;
                break;
        }

    }

    @Override
    void onDestory() {

        bitmapPlane.recycle();
    }
}
/**
 * Created by Administrator on 2016/7/26.
 */
public class ObjectMasterBullet {

    /**
     * 子弹的坐标
     */
    public int x, y;

    public int offsetY = 0;

}

 

posted on 2016-07-26 17:15  青年程序猿  阅读(147)  评论(0)    收藏  举报