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.选择& ...
随机推荐
- JS获取fileupload文件全路径
来自:http://hi.baidu.com/libos88/item/c61ab8bae472afe34ec7fdfb 最近在写个小网站,用到了fileupload控件来上传文件.因为程序的某些需要 ...
- LArea插件的使用
楼主菜鸟一枚,开发微信端三级滑动遇到的N多技术问题,与大家分享,话不多说,先上效果图: LArea插件的使用,前端部分参考如下: 关于PHP插件使用,请往下看: 1.首先在前端页面引入js样式和插 ...
- 【20171025晚】alert(1) to win 第五题 正则表达式过滤
吃过晚饭,再练一题 第五题 function escape(s) { var text = s.replace(/</g, '<').replace(/"/g, '"' ...
- iOS之 LLDB调试常用命令
LLDB是LLVM下的调试器.Xcode从4.0开始编译器开始改用LLVM,相应的调试器也从gdb改为LLDB. 1. p 用于输出基本类型 2. po 用于输出Objective-C对象 3. ex ...
- 磁盘管理之 raid 文件系统 分区
第1章 RAID 磁盘阵列 1.1 使用raid的目的 1)获得更大的容量 2)让数据更安全 3)读写速度更快 1.2 raid0.raid1.raid5.raid10对比 磁头 0磁道 1扇区 前4 ...
- hive中UDF、UDAF和UDTF使用
Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...
- jsp静态与动态包含的区别和联系
1. <%@ include file=” ”%>是指令元素.<jsp:include page=” ”/>是行为元素 2. 最终编译成java文件的数目不同. * 静态包含在 ...
- Redis的使用初探
Redis Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化. 与其它键值数据存储相比,Redis有一组相对丰富的数据类型. Redis可以将数据复制到任意数量的从机中 Redis的安装 官 ...
- Servlet的理解
一.什么是Servlet? Servlet是用Java编写的web组件,实际上可以简单的理解为是用来处理请求的,为什么这么说,看了它的生命周期就知道了. 二.常见的Servlet容器 4容器顾名思义是 ...
- Python做的第一个小项目-模拟登陆
1. 用户输入帐号密码进行登陆 2. 用户信息保存在文件内 3. 用户密码输入错误三次后锁定用户 主要采用循环语句和条件语句进行程序流程的控制,加入文件的读写操作 while True: choice ...