Himi 原创, 转载请注明! 谢谢。
原文地址:http://blog.csdn.net/xiaominghimi/archive/2010/12/21/6089594.aspx
在Android游戏当中充当主要的除了控制类外就是显示类,在J2ME中我们用Display和Canvas来实现这些,而Google Android中涉及到显示的为view类,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 来进行游戏开发。
那么在以后源码实例中,我都会以继承sarfaceView框架来进行演示。下一章将详细剖析sarfaceview ,以及附上本人写的游戏开发架构
分享到:
相关推荐
2.Android游戏开发之旅二 View和SurfaceView 3.Android游戏开发之旅三 View类详解 4.Android游戏开发之旅四 Canvas和Paint实例 5.Android游戏开发之旅五 Path和Typeface 6.Android游戏开发之旅六 自定义View 7....
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建高性能的图形界面,比如游戏或者视频播放器。SurfaceView具有自己的绘制表面,与主线程分离,因此可以进行独立于UI线程的高性能渲染。...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建一个独立的、高性能的绘图表面。SurfaceView通常用于视频播放、游戏或者需要频繁更新图像的场景。然而,有时候当我们尝试在SurfaceView...
在Android平台上,SurfaceView是一种特殊的View,用于处理高性能、低延迟的图形绘制,尤其是在开发游戏或者视频播放等需要高效刷新率的应用时。本测试Demo旨在展示如何有效地利用SurfaceView进行游戏开发。以下是对...
通过分析这个"android游戏开发之飞机案例",我们可以学习到Android游戏开发的核心技术和最佳实践,包括UI设计、游戏逻辑、对象模型以及性能优化等多个方面。这不仅对于初学者,对经验丰富的开发者来说也是一个有价值...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理高性能图形和视频渲染时。`SurfaceView`提供了直接与硬件图形管道交互的能力,使得开发者可以在单独的线程中进行绘制,从而避免阻塞UI主线程,...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行绘制操作,从而提高图形渲染性能,特别适用于需要连续更新显示内容的应用,如游戏、视频播放等。本示例中,"Android SurfaceView 多...
在Android平台上进行游戏开发时,SurfaceView是一个至关重要的组件,它是专门为高性能图形设计的,比如游戏、视频播放等需要连续刷新显示的应用。SurfaceView提供了一种优化的绘图机制,可以将绘制操作与应用程序的...
在Android应用开发中,SurfaceView是一个非常重要的组件,...通过分析和学习这份源码,开发者不仅能掌握SurfaceView的使用,还能了解到游戏循环、线程管理、资源优化等方面的知识,对提升Android游戏开发技能大有裨益。
在Android游戏开发实战宝典中,开发者将深入学习如何利用...通过分析"源代码"这个压缩包,你将有机会亲手探索以上各知识点的实际应用,加深对Android游戏开发的理解。这不仅是理论知识的验证,更是实践能力的提升。
在Android游戏开发中,SurfaceView是一个非常重要的组件,它提供了高效、低延迟的图形渲染机制,特别适合用于游戏和实时视频等对性能要求较高的场景。本篇将详细讲解如何使用SurfaceView来实例控制角色移动。 首先...
在Android平台上,开发一款游戏应用,尤其是涉及到动画和实时渲染的项目,如“斗地主”,通常会使用SurfaceView框架。SurfaceView是Android系统提供的一个用于处理高性能、低延迟显示的视图组件,特别适合于游戏和...
工具方面,开发者可以使用Android Studio的Layout Inspector查看View的层级结构,使用Traceview分析绘制性能,或者利用Android Profiler来监控CPU和内存使用情况,以便在使用View或SurfaceView时进行性能优化。...
在Android应用开发中,高效的图形渲染对于提升用户体验至关重要。标题中的"VIEW双缓冲与SurfaceView比较"涉及到两个关键概念:双缓冲技术(Double Buffering)和SurfaceView。这两个概念都是Android系统为了优化UI...
4. **自定义View**: 为了实现五子棋游戏的交互,开发者可能会创建自定义的View类,继承自Android的View或SurfaceView,以便处理触摸事件、绘制棋盘和棋子。 5. **多线程处理**: 游戏逻辑通常在单独的线程中运行,以...
在Android平台上,SurfaceView是一个非常重要的视图组件,它被设计用于处理高性能、低延迟的图形...通过对这个例程的分析和实践,将有助于理解和掌握SurfaceView的使用技巧,为开发高性能的Android应用打下坚实基础。
在Android游戏开发中,事件处理是构建用户交互性游戏的核心部分。本教程将深入探讨如何在Android平台上处理游戏中的各种用户输入事件,如触摸屏幕、按键等,以实现游戏的动态响应。源码分析将帮助你更好地理解这些...
这篇博客文章“android 摇摇棒 之surfaceView vs. View”探讨了在实现这一功能时,如何选择SurfaceView和View作为显示层的优缺点。在这篇文章中,作者可能会深入解析Android的传感器API,以及SurfaceView和View在...
在Android应用开发中,理解和掌握View的双缓冲机制以及SurfaceView的使用是非常关键的技能,尤其是在性能优化和游戏开发方面。下面将详细讲解这两个概念及其差异。 **双缓冲技术** 双缓冲是一种图形绘制优化技术,...