首先,我们要创建一个GameSurface()类;我们此次采用的是画登入界面的方式,所以GameSurface()需要继承SurfaceView类而且要执行SurfaceHolder.Callback的方法,并且实现其中的没有完成的方法surfaceChanged、surfaceDestroyed、surfaceCreated、GameSurface。

第二步我们需要创建SurfaceHolder 的对象surfaceHolder,这个是包装类;再创建画布类Canvas的对象canvas和画笔类Paint对象paint并用private修饰。

第三:在GameSurface类中初始化surfaceHolder;再添加回调函数surfaceHolder = this.getHolder();接着我们初始化画笔;再添加抗锯齿paint.setAntiAlias();其中的参数为true。

第四:在surfaceCreated方法中添加一个新的线程,在run()方法中写一个myDraw()方法并用快捷键实现。再在myDraw()方法中先将画布加锁surfaceHolder.lockCanvas();再判断画布是否为空如果不是则将画布显示在模拟器上;这是模拟器呈现的是一片黑色的背景。

第五:这时我们需要把制作飞机大战的图片拷贝至res中的deawable中;再在GameSurface()中创建bmpMenuBG,Logo:bmplogo,按钮:bmpButton,文本:bmptext。再用private修饰,基于Bitmap类创建;接着我们在GameSurface()中创建一个方法initBitmap()导入我们需要的图片用bmpMenuBG=BitmapFactory.decodeResource(this.getResources(), R.drawable.mainmenu);

其中最后的mainmenu就是我们添加的图片。 然后我们就可以开始画了。我们先创建一个GameMenu()类,将我们需要的页面背景图片对象:bmpMenuBG,Logo:bmplogo,按钮:bmpButton,文本:bmptext。再用private修饰,基于Bitmap类创建在创建构造方法GameMenu(),封装我们创建的四个对象。在创建一个普通的方法myDraw(),其中传入画布Canvas的对象canvas和画笔Paint的对象paint就可以开始”画”了。第一步先将画布背景换成我们需要的背景图案用canvas调用drawBitmap方法其中需要四个参数第一个是我们第一的背景图片bmpMenuBG,第二个数字和第三个数字是图片的位置,由于是背景图片我们就填两个0,第四个是画笔对象paint。接着我们要把飞机大战游戏Logo画上去,但是现在我们不是背景图了,所以我们要创建一个Rect()矩形方法对象r,将Logo填在这个矩形中,再将矩形放在画布上的准确位置。初始化Rect()中也要填写四个参数分别是矩形左边距离屏幕左边的距离、上边距离屏幕上边的距离、右边距离屏幕右边的距离、下边距离屏幕下边的距离。这时这四个参数需要我们好好斟酌。ps:此次我们用的是小米5splus手机调试我们用int定义一个width=canvas.getWidth()来获取模拟器宽,height=canvas.getHeight()获取模拟器高;经过调试在小米5Splus中需要填写(50,(int)(height*0.05),width-50,(int)(height*0.3+height*0.15)比较合适(根据手机不通参数不同),再用canvas调用drawBitmap在第一个改为bmplogo对象,第二个参数时填写null,第三个改为r,第四个依旧是paint。接着我们画按钮先定义一个gao,kuan;再经过调试gao= (int) (height*0.75);和kuan=width/2-bmpButton.getWidth()/2;;最后用canvas调用drawBitmap在第一个改对象bmpButton,第二个参数时填写kuan,第三个改为gao,第四个依旧是paint。最后我们在按钮上再加一个印有汉字:开始游戏1的图片再次定义gao和kuan,调试后为gao= (int) (height*0.75)+20;kuan=width/2-bmpButton.getWidth()/2+40;最后用canvas调用drawBitmap在第一个改为bmptext对象,第二个参数时填写gao,第三个改为kuan,第四个依旧是paint。至此我们完成了所有代码:`package com.lenovo.myapplication;

importAndroid.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Rect;import android.view.Surface;import android.view.SurfaceHolder;

/*** Created by HuangYong on 2017/5/24.*/

public class GameMenu {

private Bitmap bmpMenuBG;//菜单页面背景图片

private Bitmap bmplogo;//菜单页面LOGO

private Bitmap bmpButton;//菜单页面button

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;

}

public  void  myDraw(Canvas canvas, Paint paint){

//菜单背景

canvas.drawBitmap(bmpMenuBG,0,0,paint);

//画logo

int width = canvas.getWidth();//获取屏幕宽

int height=canvas.getHeight();//获取屏幕高

Rect r = new Rect(50,(int)(height*0.05),width-50,(int)(height*0.3+height*0.15));

int gao= (int) (height*0.10);

int kuan=width/2-bmplogo.getWidth()/2;

canvas.drawBitmap(bmplogo,null,r,paint);

//按钮

gao= (int) (height*0.75);

kuan=width/2-bmpButton.getWidth()/2;

canvas.drawBitmap(bmpButton,kuan,gao,paint);

//文字

gao= (int) (height*0.75)+20;

kuan=width/2-bmpButton.getWidth()/2+40;

canvas.drawBitmap(bmptext,kuan,gao,paint);

}

}`package com.lenovo.myapplication;

import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceView;

import com.lenovo.myapplication.R;

/*** Created by HuangYong on 2017/5/24.*/

public class GameSurface extends SurfaceView implements SurfaceHolder.Callback {private SurfaceHolder surfaceHolder;//包装类private Canvas canvas;//画布private Paint paint;//画笔

private Bitmap bmpMenuBG;//菜单页面背景图片

private Bitmap bmplogo;//菜单页面LOGO

private Bitmap bmpButton;//菜单页面button

private Bitmap bmptext;//菜单页面文本

public GameSurface(Context context) {

super(context);

// 初始化surfaceHoldersurfaceHolder = this.getHolder();// 添加回调函数surfaceHolder.addCallback(this);// 初始化画笔paint = new Paint();paint.setAntiAlias(true); //抗锯齿}

@Override

public void surfaceCreated(SurfaceHolder holder) {

initBitmap();

new Thread(new Runnable() {

@Override

public void run() {

myDraw();

}

}).start();

}

private void initBitmap() {

//        图片导入

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);

}

private void myDraw() {

// 画布加锁初始化canvas = surfaceHolder.lockCanvas();// 初始化游戏启动界面new GameMenu(bmpMenuBG, bmplogo, bmpButton, bmptext).myDraw(canvas, paint);// 释放画布if (canvas != null) {surfaceHolder.unlockCanvasAndPost(canvas);}}

@Override

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

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

}

}

android项目飞机大战,Android 项目之飞机大战相关推荐

  1. pygame小项目 ~ 3 :Python完成简易飞机大战

    pygame小项目 ~ 3 :Python完成简易飞机大战 子弹 敌机 我方战斗机全部采用图片 子弹击中和战斗机被击中全部采用碰撞检测 游戏的主函数代码 import spite from spite ...

  2. python飞机大战任务报告_Python飞机大战实战项目案例

    都说实践是检验知识掌握程度的最好测试.随着Python学习者的增长,越来越多的零基础入门课程让人眼花缭乱.虽然说基础理论的学习十分重要,但是如果仅仅只学习理论知识,也是远远不够的.飞机大战的项目实战可 ...

  3. 飞机大战java_java版飞机大战实战项目详细步骤

    本文为大家分享了java版飞机大战实战项目,供大家参考,具体内容如下 分析 飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是 ...

  4. java基础小项目_java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天 一.关键问题(理论): 1.简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系 2.简述Hero类构造 ...

  5. android 飞机大战背景图片,安卓飞机大战(一) 背景移动

    在制作游戏时,背景可以移动,原理就是两张图片的循环移动. package com.example.backgroundtest; import com.example.hundouluo.R; imp ...

  6. android 飞机动画,Android实现纸飞机的简单操作

    在项目中,我们要求做一个纸飞机的功能:就是当打开这个界面时,会有4架纸飞机从屏幕左侧飞入,然后到达自己的位置坐上下浮动,同时云彩也不断地从屏幕右侧飘到屏幕左侧.当你点击其中一个纸飞机时,这个纸飞机先向 ...

  7. 我的Android进阶之旅------Android项目目录结构分析

    此文章来自"博客园"博主,仅在此借鉴,学习 1.HelloWorld项目的目录结构 1.1.src文件夹 1.2.gen文件夹 1.3.Android 2.1文件夹 1.4.ass ...

  8. android 释放so,在安卓项目里部署so文件你需要知道的知识

    我们往往很容易对.so文件应该放在或者生成到哪里感到困惑,下面是一个总结: Android Studio工程放在main/jniLibs/ABI目录中(当然也可以通过在build.gradle文件中的 ...

  9. android 动态添加元素,动态添加项目到Android中的NavigationView

    Hexise.. 13 假设您有两个组,group1和group2.如果要将项目动态添加到group1,则可以为group2分配优先级,使其始终低于group1.然后,当您向group1添加新项目时, ...

最新文章

  1. java基础之——类的初始化顺序(转载)
  2. python 测试multiprocessing多进程
  3. 迭代器 java_面试必备(含答案):30 个 Java 高频面试问题
  4. Java中抽象类和接口之间的区别
  5. mc服务器tps优化,LaggRemover——降低延迟/优化TPS/内存
  6. bzoj1036 树的统计Count 树链剖分
  7. 别急,MIUI 11还有惊喜!下一代MIUI项目已开拔
  8. 指定精确度(*号的使用)
  9. linux内存脚本下载,linux tmpfs及消耗内存脚本
  10. 接触网作业车司机许新峰的春运
  11. MVC之 自定义过滤器(ActionFilterAttribute)
  12. Raspberry 安装vstudio
  13. 机器学习之密度聚类(DBSCAN)
  14. Yar服务端与客户端交互,请求原理
  15. 微信小程序跳转页面问题
  16. 强化学习王者荣耀项目修改
  17. 【小迪安全】web安全|渗透测试|网络安全 | 学习笔记-7
  18. 第14周收录104起融资,国外企业服务领域较为火爆丨潜在周报
  19. 在带有触控 ID 的妙控键盘上无法正常使用触控 ID的解决方法
  20. 样本不平衡的常用处理方法

热门文章

  1. python模块安装_Python如何安装模块详细教程
  2. 图像修复(Image Restoration)
  3. 【学习笔记之程序员】笔记
  4. Ubuntu20.04 系统安装USB无线网卡 TL-WDN5200免驱版 安转失败不显示WiFi的一种解决方案
  5. What are default and maximum values of dev_loss_tmo in Red Hat Enterprise Linux 6
  6. 将电脑调成护眼色不一定起到护眼的功能
  7. 2021-10-27 链表,双指针
  8. Terra Gate 安装
  9. 信奥中的数学:质数与合数
  10. java 删除本地图片_java如何删除