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.选择& ...
随机推荐
- Android onSaveInstanceState和onRestoreInstanceState()
首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() .关于这两个方法,一些朋友可能在Android开发过程中很少用到,但在有时候掌握其用法会帮我 ...
- linux下如何安装破解IntelliJ IDEA,及其基本使用教程;
今天在linux下安装了IntelliJ idea,由于现在很多企业在linux平台下使用IntelliJ idea做java web的开发,所以对于IntelliJ idea的安装和学习是一件基本的 ...
- win10 & Ubuntu16 双系统安装
忽然心血来潮吧,本机在已经安装了win10的背景下,想要再加一个linux系统学习学习,几经波折,终于成功. 博主笔记本里有两块固态,一个250G的装了win10,装的时间不久,镜像是在msdn上下载 ...
- Hadoop(十三)分析MapReduce程序
前言 刚才发生了悲伤的一幕,本来这篇博客马上就要写好的,花了我一晚上的时间.但是刚才电脑没有插电源就没有了.很难受!想哭,但是没有办法继续站起来. 前面的一篇博文中介绍了什么是MapReduce,这一 ...
- Java基础——数据类型
Java中与C++的区别: 1.Java中没有无符号类型. 2.整型值和布尔值之间不能进行相互转换. 3.Java中不区分变量的定义和声明. 如:在C++中int i = 10;是一个定义,而exte ...
- 编程&blog处女篇-用C#求100以内的质数
using System;namespace Loops{ class Program { static void Main(string[] args) { /*局部变量定义*/ int i, j; ...
- 我的第一个python web开发框架(15)——公司介绍编辑功能
完成登录以后,就会进入后台管理系统的主界面,因为这个是小项目,所以导航菜单全部固化在HTML中,不能修改.一般后台还会有一个欢迎页或关键数据展示的主页面,小项目也没有多大的必要,所以登录后直接进入公司 ...
- spring boot 自己输出json数据
@RequestMapping("/json")public void json(HttpServletResponse response, Pager pager, TruckF ...
- angular2安装笔记
主要摘自:http://www.runoob.com/angularjs2/angularjs2-typescript-setup.html http://blog.csdn.net/lgpwwa/a ...
- 三种方式打印杨辉三角形(JAVA实现)
//采用一个二维数组打印杨辉三角 class Yanghui1 { public static void main(String[] args) { //设置杨辉三角的行数 int num = 10; ...