SurfaceView 使用demo 飞机游戏小样

本demo 主要使用了surfaceview 画图。
1.在线程中对canvas操作。
2.实现画图
3.surfaceView 继承了view 可以重写ontouchevent方法来操作输入。
代码存放:https://github.com/wish521/SurvaceViewDemo
主类:
package com.survaceview.view; import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView; import com.survaceview.R;
import com.survaceview.utils.ScreenUtil;
import com.survaceview.view.Logic.BulletFactory;
import com.survaceview.view.Logic.BulletManger;
import com.survaceview.view.Logic.MainPlaneManerger;
import com.survaceview.view.Logic.NpcManerger;
import com.survaceview.view.maps.Map; /**
* Created by hongtao on 2017/10/25.
*/ public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { public MySurfaceView(Context context) {
super(context);
init();
} public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
} public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
} SurfaceHolder mSurfaceHolder; private void init() {
mSurfaceHolder = getHolder();
mSurfaceHolder.addCallback(this);
} boolean mSurfaceIsCreated = false;
Map mMap; @Override
public void surfaceCreated(SurfaceHolder holder) {
mSurfaceIsCreated = true;
BulletFactory.propear(getContext());
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
ScreenUtil.SCREEN_W = width;
ScreenUtil.SCREEN_H = height;
mMap = new Map(width, height);
mMap.init(getResources(), R.raw.bg); MainPlaneManerger.getInstance().init(getResources(), width, height); NpcManerger.getInstance().init(getResources());
gameThread.start();
} @Override
public void surfaceDestroyed(SurfaceHolder holder) {
mSurfaceIsCreated = false;
} long startTime;
long endTime;
long renderTime;
Thread gameThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) { startTime = System.nanoTime();
Canvas canvas = mSurfaceHolder.lockCanvas();
try {
if (mSurfaceIsCreated) {
if (mMap != null) {
mMap.draw(canvas);
} MainPlaneManerger.getInstance().run(canvas); if (NpcManerger.getInstance() != null) {
NpcManerger.getInstance().run(canvas);
} BulletManger.getInstance().draw(canvas); if (MainPlaneManerger.getInstance().getIsDie()) {
break;
}
}
endTime = System.nanoTime();
renderTime = endTime - startTime; if (1000 / 30 - renderTime > 0) {
Thread.sleep(1000 / 30 - renderTime);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}); @Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
return true;
case MotionEvent.ACTION_MOVE:
MainPlaneManerger.getInstance().move(event.getRawX(), event.getRawY());
break;
case MotionEvent.ACTION_UP:
break;
}
return super.onTouchEvent(event);
} }
SurfaceView 使用demo 飞机游戏小样的更多相关文章
- 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)
微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...
- 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)
微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...
- 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)
微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)
微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...
- 用canvas整个打飞机游戏
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 之前在当耐特的DEMO里看到个打飞机的游戏,然后就把他的图片和音频扒了了下来....自己凭着玩的心情重新写了一个.仅供娱乐哈......我 ...
- pygame开发PC端微信打飞机游戏
pygame开发PC端微信打飞机游戏 一.项目简介 1. 介绍 本项目类似曾经火爆的微信打飞机游戏.游戏将使用Python语言开发,主要用到pygame的API.游戏最终将会以python源文件gam ...
- 实例源码--IOS高仿微信打飞机游戏(完整功能)
下载源码 技术要点: 1. IOS游戏开发基础框架 2. 高仿打飞机游戏 3. 游戏背景音频技术 4.源码详细的中文注释 ……. 详细介绍: 1. IOS游戏开发基础框架 此套源码为涉及IOS游戏开发 ...
- 射击的乐趣:WIN32诠释打飞机游戏源码补充
打飞机游戏源码补充 从指定位置加载bmp并显示到对话框. , TRUE);, , LR_LOADFROMFILE); { BITMAP bmpinfo; ...
- <Win32_20>纯c语言版的打飞机游戏出炉了^_^
经过昨天的苦战,终于完成了纯C版的打飞机游戏——使用微信打飞机游戏的素材,不过玩法有些不同,下面会有详述 一.概述游戏的玩法.实现效果 1. 游戏第一步,简单判断一下,给你一个准备的时间: 2.选择& ...
随机推荐
- Python 使用正则表达式
当使用正则表达式时,re 模块内部会干两件事情 1.编译正则表达式,如其字串本身不合法,报错 2.用编译后的正则表达式去匹配字符串 re_telephone = re.compile(r'^(\d{3 ...
- [译]ASP.NET Core 2.0 机密配置项
问题 如何在ASP.NET Core 2.0中保存机密配置项(不用将其暴露给源代码管理器)? 答案 创建一个ASP.NET Core 2.0空项目,在项目节点上点击右键,并点击菜单项 - 管理用户机密 ...
- java:利用静态字段和构造函数实现已建对象数查询
问题:使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数. 请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?". 程序设计思想: 利用静态变量指定一个计数 ...
- LeetCode 572. Subtree of Another Tree (是否是另一个树的子树)
Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and no ...
- ASP.NET没有魔法——Identity与Owin
上篇文章介绍了如何在ASP.NET MVC项目中引入Identity组件来实现用户注册.登录及身份验证功能,并且也提到了Identity是集成到Owin中的,本章就来介绍一下什么是Owin以及如何使用 ...
- 使用element ui 日期选择器获取值后的格式问题
一般情况下,我们需要给后台的时间格式是: "yyyy-MM-dd" 但是使用Element ui日期选择器获取的值是这样的: Fri Sep :: GMT+ (中国标准时间) 在官 ...
- 原生JS实现Ajax及Ajax的跨域请求
前 言 如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿.当然,如今有着许多的框架,都有相对应的前后台数据交互的方法. ...
- Lua 5.3 迭代器的简单示例
Lua 5.3 迭代器的简单示例 创建"closure"模式的"iterator" function allowrds() local line = io.re ...
- King
King Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...
- css中的em用法
px:是相对于浏览器分辨率的一个度量单位 em是一个相对于父元素的font-size的大小的一个度量单位 1.浏览器的默认字体大小是16px 2.如果元素自身没有设置字体大小,那么元素自身上的所有属性 ...