绘制好了 飞机 和子弹
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; }
浙公网安备 33010602011771号