(游戏)打飞机01:前言 传送门
(游戏)打飞机02:游戏背景滚动 传送门
(游戏)打飞机03:控制玩家飞机 传送门
(游戏)打飞机04:绘画敌机、添加子弹 传送门
(游戏)打飞机05:处理子弹,击中敌机,添加计分板 传送门
(游戏)打飞机06:后续 传送门
游戏背景滚动效果
package com.example.administrator.myapplication; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.WindowManager; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2018/8/9. */ public class dafeijiGameView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ private Bitmap my;//自己 private Bitmap baozha;//爆炸 private Bitmap bg;//背景 private Bitmap diren;//敌人 private Bitmap zidan;//子弹 private Bitmap erjihuancun;//二级缓存 private WindowManager windowManager;//获得界面长宽高 private int display_w; //界面的宽 private int display_h; //界面的高 private List<GameImage> gameImage = new ArrayList(); public dafeijiGameView(Context context) { super(context); getHolder().addCallback(this); } private void init(){ //加载照片 my= BitmapFactory.decodeResource(getResources(),R.drawable.my); baozha= BitmapFactory.decodeResource(getResources(),R.drawable.baozha); bg= BitmapFactory.decodeResource(getResources(),R.drawable.bg); diren= BitmapFactory.decodeResource(getResources(),R.drawable.diren); zidan= BitmapFactory.decodeResource(getResources(),R.drawable.zidan); erjihuancun=Bitmap.createBitmap(display_w,display_h, Bitmap.Config.ARGB_8888); gameImage.add(new BeijingImage(bg)); //先加入背景照片 } private interface GameImage{ public Bitmap getBitmap(); public int getX(); public int getY(); } //负责背景照片的处理 private class BeijingImage implements GameImage{ private Bitmap bg; private BeijingImage(Bitmap bg){ this.bg=bg; newBitmap = Bitmap.createBitmap(display_w,display_h, Bitmap.Config.ARGB_8888); } private Bitmap newBitmap = null; private int height = 0; public Bitmap getBitmap(){ Paint p = new Paint(); Canvas canvas = new Canvas(newBitmap); canvas.drawBitmap(bg, new Rect(0,0,bg.getWidth(),bg.getHeight()), new Rect(0,height,display_w,display_h+height),p); canvas.drawBitmap(bg, new Rect(0,0,bg.getWidth(),bg.getHeight()), new Rect(0,-display_h+height,display_w,height),p); height++; if(height==display_h){ height=0; } return newBitmap; } public int getX(){ return 0; } public int getY(){ return 0; } } private boolean state = false; private SurfaceHolder holder; //绘画中心 public void run() { Paint p1 = new Paint(); try{ while(true){ Canvas newCanvas = new Canvas(erjihuancun); for(GameImage image:gameImage){ newCanvas.drawBitmap(image.getBitmap(),image.getX(),image.getY(),p1); } Canvas canvas = holder.lockCanvas(); canvas.drawBitmap(erjihuancun,0,0,p1); holder.unlockCanvasAndPost(canvas); Thread.sleep(10); } }catch(Exception e){ } } @Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { state = false; } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { //得到屏幕的宽和高 display_w=width; display_h=height; init(); this.holder=holder; state = true; new Thread(this).start(); } }