`
caiwb1990
  • 浏览: 312618 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android游戏-view和surfaceView

 
阅读更多
在Android游戏当中充当主要的除了控制类外就是显示类,Android游戏开发中比较重要和复杂的就是显示和游戏逻辑的处理。

这里我们说下android.view.View和android.view.SurfaceView。SurfaceView是从View基类中派生出来的显示类,直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及Camera摄像头一般均使用SurfaceView,到底有哪些优势呢? SurfaceView可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了SurfaceHolder类,使用getHolder方法获取,相关的有Canvas lockCanvas()
Canvas lockCanvas(Rect dirty) 、void removeCallback(SurfaceHolder.Callback callback)、void unlockCanvasAndPost(Canvas canvas) 控制图形以及绘制,而在SurfaceHolder.Callback 接口回调中可以通过重写下面方法实现。

使用的SurfaceView的时候,一般情况下要对其进行创建,销毁,改变时的情况进行监视,这就要用到 SurfaceHolder.Callback.
class XxxView extends SurfaceView implements SurfaceHolder.Callback {

public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){}
//看其名知其义,在surface的大小发生改变时激发
public void surfaceCreated(SurfaceHolder holder){}
//同上,在创建时激发,一般在这里调用画图的线程。
public void surfaceDestroyed(SurfaceHolder holder) {}
//同上,销毁时激发,一般在这里将画图的线程停止、释放。

}

对于Surface相关的,Android底层还提供了GPU加速功能,所以一般实时性很强的应用中主要使用SurfaceView而不是直接从View构建,同时后来做android 3d OpenGL中的GLSurfaceView也是从该类实现。



SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。
那么在UI的主线程中更新画面 可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。那么将无法响应按键,触屏等消息。
当使用surfaceView 由于是在新的线程中更新画面所以不会阻塞你的UI主线程。但这也带来了另外一个问题,就是事件同步。比如你触屏了一下,你需要surfaceView中thread处理,一般就需要有一个event queue的设计来保存touch event,这会稍稍复杂一点,因为涉及到线程同步。

所以基于以上,根据游戏特点,一般分成两类。

1 被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。

2 主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。

3.Android中的SurfaceView类就是双缓冲机制。因此,开发游戏时尽量使用SurfaceView而不要使用View,这样的话效率较高,而且SurfaceView的功能也更加完善。

考虑以上几点,所以我一直都选用 SurfaceView 来进行游戏开发。


0
0
分享到:
评论

相关推荐

    Android 构建游戏框架View与SurFaceView的区别

    在Android平台上构建游戏框架时,开发者常常会遇到两种主要的视图组件——View和SurfaceView。它们虽然都属于Android视图系统的一部分,但在处理高性能、低延迟的图形渲染时,两者有着显著的区别。 首先,我们要...

    实例3--使用surfaceView

    SurfaceView是Android系统中一个非常重要的视图组件,它在处理复杂的图形绘制和视频播放等高性能应用时扮演着关键角色。本实例将深入探讨SurfaceView的工作原理及其使用方法。 1. **SurfaceView概述** SurfaceView...

    mini-bird-android-surfaceview

    通过实践"迷你小鸟"游戏,你将深入了解Android游戏开发的基础,包括SurfaceView的使用、游戏循环、碰撞检测和用户交互。这个过程不仅可以锻炼你的编程技能,也为进一步学习更复杂的游戏开发打下坚实基础。 以上就是...

    4-4(SurfaceView游戏框架).7z

    SurfaceView在Android游戏开发中扮演着至关重要的角色,它是一种特殊的View,被设计用来支持高性能的图形绘制,尤其是在实现游戏框架时。SurfaceView提供了一种高效、低延迟的机制来更新屏幕内容,使得游戏和视频...

    Android-HeartView通过继承SurfaceView实现直播点亮功能的心形效果

    综上所述,这个项目是一个很好的示例,展示了如何通过继承SurfaceView来自定义复杂视图并实现动画效果,对于学习Android图形绘制和性能优化有着重要的参考价值。在实际开发中,可以借鉴这种方法来创建其他形状的动画...

    android之view和surfaceview用法示例汇总

    在Android开发中,View和SurfaceView是两种非常重要的视图组件,它们用于在屏幕上显示内容和处理用户交互。本文将详细解析View和SurfaceView的基本概念、用法以及它们之间的区别,通过实例代码来帮助理解。 **一、...

    Android高级应用源码-Android使用SurfaceView实现墨迹天气的风车效果.rar

    SurfaceView在Android UI层次结构中独立于普通的View,它有自己的Surface和SurfaceHolder,可以避免UI主线程阻塞,提高渲染性能。SurfaceHolder允许我们监听Surface的状态变化,如创建、更改大小或销毁,便于我们在...

    Android高级应用源码-Android使用SurfaceView实现墨迹天气的风车效果.zip

    SurfaceView是Android系统提供的一个用于高效处理图形和视频的视图组件,特别适合于需要进行高性能图形渲染的场景。 首先,我们来了解SurfaceView的基本概念。SurfaceView是一个特殊的View,它有自己的Surface对象...

    android-SurfaceView 测试Demo

    在Android平台上,SurfaceView是一种特殊的View,用于处理高性能、低延迟的图形绘制,尤其是在开发游戏或者视频播放等需要高效刷新率的应用时。本测试Demo旨在展示如何有效地利用SurfaceView进行游戏开发。以下是对...

    Android代码-SurfaceView添加组件view不被组件覆盖.zip

    在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建高性能的图形界面,比如游戏或者视频播放器。通常,SurfaceView有一个独立的渲染线程,用于处理高耗时的图形操作,以避免阻塞主线程,...

    View与SurfaceView游戏框架Demo

    接下来是`SurfaceView`,它是为了解决`View`在处理频繁动画和游戏时的性能问题而设计的。`SurfaceView`拥有自己的独立渲染线程,可以在后台进行绘图,避免了阻塞主线程。这样,即使在进行复杂的图形渲染时,也能保证...

    Android中SurfaceView截屏

    在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理视频播放、游戏渲染等高性能图形操作时,它的优势在于拥有独立于主线程的渲染机制,能避免阻塞UI更新。然而,由于其特殊的性质,直接通过常规...

    android SurfaceView游戏框架

    开发者可以通过查看这个例子学习如何结合SurfaceView和游戏逻辑来构建自己的游戏框架。 通过理解和熟练运用SurfaceView,开发者可以创建出高性能、流畅的游戏体验,满足用户对于游戏画质和响应速度的需求。同时,...

    android View、SurfaceView Demo

    在Android开发中,View和SurfaceView是两种非常重要的视图组件,它们被广泛用于构建用户界面和处理图形绘制。这两个类都是Android系统提供用来显示动态内容的机制,但它们之间存在一些关键的区别。 **View组件** ...

    安卓Android源码——SurfaceView添加组件view不被组件覆盖.zip

    在安卓开发中,`SurfaceView` 是一个非常重要的视图组件,它允许开发者在应用程序中创建一个独立于窗口管理器的表面,这个表面可以用于显示持续更新的图像,如视频播放或者游戏画面。`SurfaceView` 提供了一个优化的...

    Android游戏框架SurfaceView介绍

    ### Android游戏框架SurfaceView介绍 #### 一、SurfaceView与游戏开发 在Android平台上开发游戏时,SurfaceView是一个非常重要的组件。它提供了低延迟的显示功能,并且支持双缓冲机制,这对于实时渲染图像非常关键...

    安卓开发-Android使用SurfaceView实现墨迹天气的风车效果.zip.zip

    在安卓应用开发中,SurfaceView是一个非常重要的组件,它提供了在主线程之外进行绘图的能力,使得复杂的动画或游戏能够流畅运行。...这只是一个起点,你可以在此基础上探索更多复杂的动画和游戏开发。

    Android SurfaceView添加组件view不被组件覆盖.zip

    - 使用`FrameLayout`或`RelativeLayout`:将SurfaceView和其他View放入一个父容器(如FrameLayout或RelativeLayout),然后通过设置LayoutParams来调整各个View的相对位置,使得其他View能显示在SurfaceView之上。...

Global site tag (gtag.js) - Google Analytics