飞机大战项目(1)主菜单

首先正式在制作飞机打战之前我们先把所需的图片导入Android Studio中放在app/main/res/dawable/,目录下;(导入的方法直接复制图片,之后选中dawable文件夹粘贴即可)

主界面总体包括:
一.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 , bmpMenuT xt );
}

完成后:
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 ));

}
}

猜你喜欢

转载自blog.csdn.net/qq_38845493/article/details/72721224