Android 游戏开发笔记一、入门之SurfaceView的使用
来源:互联网 发布:元数据定义都用大写吗 编辑:程序博客网 时间:2024/06/06 03:25
入门笔记之SurfaceView 使用
一、首先介绍几个类
1、SurfaceHolder
这里用到了一个类SurfaceHolder,可以把它当成surface的控制器,用来操纵surface。处理Canvas上的效果和动画,控制表面,大小。
2、SurfaceHolder.Callback
实现surfaceView的回调函数,三个函数看名字也知道是什么意思。
3、Canvas
理解为画布,就是你要使用canvas 把你想表现的东西画出来。
二、代码逻辑过程
-->继承SurfaceView并实现SurfaceHolder.Callback 接口
--> SurfaceView.getHolder()获得SurfaceHolder 对象
-->SurfaceHolder.addCallback(callback) 添加回调函数
-->SurfaceHolder.lockCanvas()获得Canvas 对象并锁定画布
--> Canvas 绘画
-->SurfaceHolder.unlockCanvasAndPost(Canvas canvas) 结束锁定,并提交改变,将图形显示。
需要说明一点的是,SurfaceHolder.lockCanvas() /SurfaceHolder.lockCanvas(Rect dirty),支持区域重画,也就是说你可以之修改画面的一部分。(ok,其实L没有亲自尝试具体效果)
三、具体代码示例
package com.game;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.MotionEvent;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;public class GameView extends SurfaceView implements Callback {SurfaceHolder mHolder;Ball mBall;private GameThread mThread ;public GameView(Context context) {super(context);mHolder = getHolder();mThread = new GameThread(mHolder);mHolder.addCallback(this);setFocusable(true);mBall = new Ball(context);}@Overrideprotected void onDraw(Canvas canvas) {}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch(event.getAction()){case MotionEvent.ACTION_DOWN:break;case MotionEvent.ACTION_MOVE:break;case MotionEvent.ACTION_UP:break;}mBall.getUp();return super.onTouchEvent(event);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {mThread.start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {mThread.runable = false;}class GameThread extends Thread{public boolean runable = true ;private SurfaceHolder holder;public GameThread(SurfaceHolder holder){this.holder = holder;}@Overridepublic void run() {super.run();while(runable){synchronized (holder){System.out.println("ondrawing ");Canvas cv = holder.lockCanvas();cv.drawColor(Color.BLACK);mBall.ondraw(cv);holder.unlockCanvasAndPost(cv);}try{Thread.sleep(100);}catch(Exception e){e.printStackTrace();}finally{}}}@Overridepublic synchronized void start() {super.start();}}}
就是通过一个线程去不断地修改图片的位置,在surfacecreated里面 start()!完整例子随后会给出地址!
0 0
- Android 游戏开发笔记一、入门之SurfaceView的使用
- Android 游戏开发之 SurfaceView
- Android游戏开发之SurfaceView的使用-android学习之旅(五)
- Android游戏开发入门讲解-SurfaceView-1
- Android游戏开发入门讲解-SurfaceView-2
- Android游戏开发入门:SurfaceView+SurfaceHolder+Thread
- android开发中使用surfaceView开发游戏
- android 游戏开发 - 使用SurfaceView 创建你自己的View
- Android游戏开发之SurfaceView动画
- Android 游戏开发之SurfaceView框架
- android游戏开发初学之SurfaceView创建
- Android游戏开发使用View还是SurfaceView
- Android游戏开发使用View还是SurfaceView
- Android应用程序入门 推箱子游戏开发(一) surfaceView 实现动画效果
- 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)
- Android游戏开发(一) SurfaceView游戏框架
- Android游戏开发之SurfaceView与游戏开发
- android游戏之SurfaceView
- linux下如何把时间转成秒数,或把秒数转换成标准时间格式
- ios开发中的基本设计模式
- android编译错误“OnClickListener cannot be resolved to a type”解
- 关闭jsp脚本和el运算
- iphone里用网络访问
- Android 游戏开发笔记一、入门之SurfaceView的使用
- log4j各配制项详解
- IE9中X-UA-Compatible失效的问题与值: 对象为 null 或未定义
- iOS网络编程之Socket
- 【转】JavaScript中Date.parse 函数用法
- sql的方式修改产品属性 - 避免使用event (magento)
- XMPPFramework环境配置
- android JNI学习五
- 详解 “预处理、编译(compile)、 代码优化、 汇编(Assembly)、 链接 (link)”的具体过程