初学Android之飞机大战(一)——游戏菜单

来源:互联网 发布:淘宝开店攻略创业篇 编辑:程序博客网 时间:2024/05/20 09:48

飞机大战所需图片

首先创建一个GameSurfaceView类,然后继承SurfaceView类和SurfaceHolder.Callback接口并实现它们的方法,同时我们声明三个对象paint,canvas和surfaceHolder。

public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback {    private Paint paint;//画笔    private Canvas canvas;//画布    private SurfaceHolder surfaceHolder;    public static int screenWidth;    public static int screenHight;    public GameSurfaceView(Context context) {    }    @Override       public void surfaceCreated(SurfaceHolder holder) {    }       @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {    }

创建完毕后我们就开始写入方法了,首先写GameSurfaceView这个方法

    public GameSurfaceView(Context context) {        super(context);        //初始化surfaceHolder        surfaceHolder = this.getHolder();        //添加回调函数        surfaceHolder.addCallback(this);        paint = new Paint();//创建画笔        paint.setAntiAlias(true);//取消锯齿    }

然后创建一个子线程

    @Override    public void surfaceCreated(SurfaceHolder holder) {        new Thread(new Runnable() {            @Override            public void run() {                    myDraw();            }        }).start();    }    private void myDraw() {        //canvas进行锁定        canvas = surfaceHolder.lockCanvas();    //        menu.drawMenu(canvas,paint);        boss.drawBoss(canvas,paint);        if(canvas!=null){            //解锁画布,呈现到视图接口            surfaceHolder.unlockCanvasAndPost(canvas);        }    }

大体构造完毕后,我们就新建一个游戏菜单类

public class GameMenu {    private Bitmap bmpMenuBG;//游戏背景    private Bitmap bmpLogo;//游戏LOGO    private Bitmap bmpButton;//开始按钮    private Bitmap bmpText;//开始文字    public GameMenu(Bitmap bmpMenuBG,Bitmap bmpLogo,Bitmap bmpButton,Bitmap bmpText){        this.bmpMenuBG = bmpMenuBG;        this.bmpLogo = bmpLogo;        this.bmpButton = bmpButton;        this.bmpText = bmpText;}

在GameMenu类中新建一个drawMenu方法,将图片画到画布上

public class GameMenu {    private Bitmap bmpMenuBG;    private Bitmap bmpLogo;    private Bitmap bmpButton;    private Bitmap bmpText;    private Rect rect1,rect2;    public GameMenu(Bitmap bmpMenuBG,Bitmap bmpLogo,Bitmap bmpButton,Bitmap bmpText){        this.bmpMenuBG = bmpMenuBG;        this.bmpLogo = bmpLogo;        this.bmpButton = bmpButton;        this.bmpText = bmpText;        rect1 = new Rect(0,GameSurfaceView.screenHight/3,GameSurfaceView.screenWidth,        GameSurfaceView.screenHight/3+GameSurfaceView.screenHight/5);        rect2 = new Rect(0,0,GameSurfaceView.screenWidth,GameSurfaceView.screenHight);    }    public void drawMenu(Canvas canvas, Paint paint){        canvas.drawBitmap(bmpMenuBG,null,rect2,paint);        canvas.drawBitmap(bmpLogo,null,rect1,paint);        int x1 = GameSurfaceView.screenWidth/2-bmpButton.getWidth()/2;        int y1 = GameSurfaceView.screenHight/3*2;        canvas.drawBitmap(bmpButton,x1,y1,paint);        int x2 = GameSurfaceView.screenWidth/2-bmpText.getWidth()/2;        int y2 = GameSurfaceView.screenHight/3*2;        canvas.drawBitmap(bmpText,x2,y2+10,paint);    }}

然后调用GameMenu类

在surfaceCreated方法中建立一个内部类initBitmap

    public void surfaceCreated(SurfaceHolder holder) {        screenWidth = this.getWidth();//获取手机屏幕宽度        screenHight = this.getHeight();//获取手机屏幕高度        initBitmap();        new Thread(new Runnable() {            @Override            public void run() {                while (true) {                    myDraw();                }            }        }).start();    }

实现initBitmap方法

    private void initBitmap() {        //把图片转化成Bitmap格式        bmpMenuBG = BitmapFactory.decodeResource(        this.getResources(),R.drawable.mainmenu);        bmpLogo = BitmapFactory.decodeResource(this.getResources(),R.drawable.logo);        bmpButton = BitmapFactory.decodeResource(this.getResources(),R.drawable.menustart);        bmpText = BitmapFactory.decodeResource(this.getResources(),R.drawable.starttext);        menu = new GameMenu(bmpMenuBG,bmpLogo,bmpButton,bmpText);    }

以上代码敲写完毕后建立一个MainActivity类执行以上的代码

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);//        setContentView(R.layout.activity_main);        setContentView(new GameSurfaceView(this));    }}

执行完毕可以看到
这里写图片描述

阅读全文
1 0
原创粉丝点击