首先正式在制作飞机打战之前我们先把所需的图片导入Android Studio中放在app/main/res/dawable/,目录下;(导入的方法直接复制图片,之后选中dawable文件夹粘贴即可)
飞机大战项目(1)主菜单
飞机大战项目(1)主菜单
主界面总体包括:
一.GameSurface类
内有包括:
1.画图所需的属性
//画图
private SurfaceHolder surfaceHolder;//包装类
private Canvas canvas; //画布
private Paint paint; //画笔
//与屏幕坐标
public static int screenWidht; //屏幕宽度
public static int screenHight; //屏幕高度

//Menu相关的 图片元素
private GameMenu gameMenu;
private Bitmap bmpMenuBG; //背景图片
private Bitmap bmpMenuLogo; //菜单页面Logo
private Bitmap bmpMenuButton;//菜单页面按钮
private Bitmap bmpMenuTxt;
2.继承extends SurfaceView类时需要重写的GameSurface(Context context)类
public GameSurface(Context context) {
super(context);
surfaceHolder = this.getHolder();//初始化holder(类似于工具)
surfaceHolder.addCallback(this);//回调函数
paint = new Paint(); //初始化画笔
paint.setAntiAlias(true); //抗锯齿

}
3.实现surfaceCreated.Callback接口时会产生(三个方法),将(SurfaceHolder holder)类进行重写了 , 添加一个主线程(new Thread)。
@Override
public void surfaceCreated(SurfaceHolder holder) {

screenWidht = this.getWidth();
screenHight = this.getHeight();

initBitmap();
new Thread(new Runnable() {
@Override
public void run() {
MyDraw();
}
}).start();

}
4,初始化画图工具方法MyDraw()
/**
* 绘图方法
*/
private void MyDraw() {
//画布锁定初始化
canvas = surfaceHolder.lockCanvas();
gameMenu.drow(canvas, paint);//实例化的gameMenu调用drow方法画出图片
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}

}
5.initBitmap(),初始化图片元素的方法把图片转化成BitmapFactory类型的图片

private void initBitmap() {
//把图片转化成BitmapFactory
bmpMenuBG = BitmapFactory.decodeResource(
this.getResources(), R.drawable.mainmenu);
bmpMenuButton = BitmapFactory.decodeResource(
this.getResources(), R.drawable.menustart);
bmpMenuTxt = BitmapFactory.decodeResource(
this.getResources(), R.drawable.starttext);
bmpMenuLogo = BitmapFactory.decodeResource(
this.getResources(), R.drawable.logo);
//初始化
gameMenu = new GameMenu(bmpMenuBG, bmpMenuLogo, bmpMenuButton, bmpMenuTxt);
}

完成后:
package com.example.gamemean;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.icu.util.Calendar;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
* Created by 小泽 on 2017/5/24.
*/

@RequiresApi(api = Build.VERSION_CODES.N)
public class GameSurface extends SurfaceView implements SurfaceHolder.Callback {


private SurfaceHolder surfaceHolder;//包装类
private Canvas canvas; //画布
private Paint paint; //画笔

public static int screenWidht; //屏幕宽度
public static int screenHight; //屏幕高度

//Menu相关的
private GameMenu gameMenu;
private Bitmap bmpMenuBG; //背景图片
private Bitmap bmpMenuLogo; //菜单页面Logo
private Bitmap bmpMenuButton;//菜单页面按钮
private Bitmap bmpMenuTxt;

public GameSurface(Context context) {
super(context);
surfaceHolder = this.getHolder();//初始化holder(类似于工具)
surfaceHolder.addCallback(this);//回调函数
paint = new Paint(); //初始化画笔
paint.setAntiAlias(true); //抗锯齿

}

@Override
public void surfaceCreated(SurfaceHolder holder) {

screenWidht = this.getWidth();
screenHight = this.getHeight();

initBitmap();
new Thread(new Runnable() {
@Override
public void run() {
MyDraw();
}
}).start();

}


@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}

/**
* 绘图方法
*/
private void MyDraw() {
//画布锁定初始化
canvas = surfaceHolder.lockCanvas();
gameMenu.drow(canvas, paint);//实例化的gameMenu调用drow方法画出图片
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}

}

private void initBitmap() {
//把图片转化成BitmapFactory
bmpMenuBG = BitmapFactory.decodeResource(
this.getResources(), R.drawable.mainmenu);
bmpMenuButton = BitmapFactory.decodeResource(
this.getResources(), R.drawable.menustart);
bmpMenuTxt = BitmapFactory.decodeResource(
this.getResources(), R.drawable.starttext);
bmpMenuLogo = BitmapFactory.decodeResource(
this.getResources(), R.drawable.logo);
//初始化
gameMenu = new GameMenu(bmpMenuBG, bmpMenuLogo, bmpMenuButton, bmpMenuTxt);
}


}


二.GameMenu类
package com.example.gamemean;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;

/**
* Created by 小泽 on 2017/5/24.
*/

public class GameMenu {
private Bitmap bmpMenuBG; //背景图片
private Bitmap bmpMenuLogo; //菜单页面Logo
private Bitmap bmpMenuButton;//菜单页面按钮
private Bitmap bmpMenuTxt;//菜单页面文本
private Rect rect; //创建一个长方形,放置飞机大战LOGO,因为logo图片过大,所以先填充一个长方体

//构造函数初始化
public GameMenu(Bitmap bmpMenuBG, Bitmap bmpMenuLogo, Bitmap bmpMenuButton, Bitmap bmpMenuTxt) {
this.bmpMenuBG = bmpMenuBG;
this.bmpMenuButton = bmpMenuButton;
this.bmpMenuLogo = bmpMenuLogo;
this.bmpMenuTxt = bmpMenuTxt;

rect = new Rect(0, GameSurface.screenHight / 3, GameSurface.screenWidht,
GameSurface.screenHight / 3 + GameSurface.screenHight / 5);
//此处三个参数
}
/**
* 画图
*
* @param canvas
* @param paint
*/
public void drow(Canvas canvas, Paint paint) {
//菜单背景
canvas.drawBitmap(bmpMenuBG, 0, 0, paint);
//画飞机大战logo,放入长方形中
canvas.drawBitmap(bmpMenuLogo, null, rect, paint);
//画按钮
int x = GameSurface.screenHight / 3 * 2;
int y = GameSurface.screenWidht / 2 - bmpMenuButton.getWidth() / 2;
canvas.drawBitmap(bmpMenuButton, y, x, paint);
//画文本
int m = y + bmpMenuButton.getWidth() / 6;
int n = x + bmpMenuButton.getHeight() / 6;
canvas.drawBitmap(bmpMenuTxt, m, n, paint);
//


}

}
注意:个元素坐标需要进行调试

三.MainActivity类
package com.example.gamemean;

import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameSurface(this));

}
}

相关文章:

  • 2021-06-29
  • 2021-09-29
  • 2021-10-13
  • 2021-11-12
  • 2021-09-19
  • 2021-10-09
  • 2021-11-12
  • 2021-11-13
猜你喜欢
  • 2021-09-09
  • 2021-09-29
  • 2021-11-22
  • 2021-09-09
  • 2021-12-20
  • 2021-04-05
  • 2021-09-09
相关资源
相似解决方案