在上一篇博客(http://maosidiaoxian.iteye.com/blog/1934842),我们已经对Angle这个Android开源游戏引擎有了简单的了解,并完成了第一步必备的准备工作——下载它的1.0发布包。但是在把它使用到我们的项目之前,还需要进一步的准备——修改源码。
这一篇将主要讲如何对它进行一些必要的修改,之后的文章再一起和大家解析它的代码及学习如何去运用它。
下面先把下载下来的Angle v1.0.zip解压,然后把工程导入eclipse,Run as Android Application,让它在手机上跑起来(由于模拟器太卡太慢,有了Android手机之后,我一般是直接用手机调试程序的)。
如果你的手机是2.2或2.3的,可能会出现下面一个问题,在运行之后打开任意一个demo,然后按返回键回到菜单,然后会出现一个错误,logcat同时打印以下信息:
E/AndroidRuntime( 9071): FATAL EXCEPTION: RenderThread
E/AndroidRuntime( 9071): java.lang.IllegalArgumentException: Make sure the SurfaceView or associated SurfaceHolder has a valid Surface
E/AndroidRuntime( 9071): at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface(Native Method)
E/AndroidRuntime( 9071): at com.google.android.gles_jni.EGLImpl.eglCreateWindowSurface(EGLImpl.java:87)
E/AndroidRuntime( 9071): at com.android.angle.EglHelper.createSurface(EGLHelper.java:89)
E/AndroidRuntime( 9071): at com.android.angle.RenderThread.guardedRun(RenderThread.java:149)
E/AndroidRuntime( 9071): at com.android.angle.RenderThread.run(RenderThread.java:53)
W/ActivityManager( 106): Force finishing activity com.android.tutorial/.AngleTutorials
这个问题我以前用另一部手机也出现过,不过很遗憾,目前的HTC手机4.0.4系统,没出现这个问题。
这个问题在项目的issue 13可以看到,作者解释了其中的原因,原来是因为android 2.2以前的版本的一个bug,必须在退出之前创建一个新的EGL context,而在2.2及其之后,就不需要了。
对于这个问题,作者在之后的代码也修复了,见其项目上-r86的版本,地址如下:http://code.google.com/p/angle/source/detail?r=86。只要注释掉RenderThread.java中的其中一行代码:
if (restartEgl) {
mEglHelper.start(configSpec);
// gl = (GL10) mEglHelper.createSurface(mView.getHolder());
}
不过纠结的是,没注释掉这一行代码,在我4.0.4的手机上能正常使用,我建了1.5和2.1.的模拟器,在把上面那一行代码注释掉之后,发现在1.5,2.1的模拟器和4.0.4的手机上也正常。
所以如果在你的手机出现这个问题了,请注释掉这一行代码试试。
第二个修改的地方,是其中获取时间间隔的方法。在1.0版本当中,作者是通过System.currentTimeMills()来获取系统当前时间,然后计算时间间隔的。但是系统当前时间却是可以被改变的,例如用户设置,或是其他程序调用了SystemClock.setCurrentTimeMillis(long)。如果在这期间系统时间被改变,那么计算到的时间间隔实际上也就不准确了。所以需要改为使用SystemClock.uptimeMillis()来获取。关于SystemClock代码,以后会再写篇文章简析。要改的地方共有三个文件,见地址:http://code.google.com/p/angle/source/detail?r=85。
除了作者在之后的提交的代码所作的修改之外,第三个是作者在AngleFont.java中使用硬编码的方式来获取SD卡的路径,需要将其改为Environment.getExternalStorageDirectory().getPath()。因为有可能你将它用于智能电视上,而目前一些智能电视是没有/sdcard这个路径的,外部存储设备被挂载在/mnt/中的usb或udisk等目录中,使用"/sdcard/"这样的硬编码的话,在这些设备上运行就会出错了。
最后附上我修改之后的代码下载地址:http://www.vdisk.cn/down/index/14742861
分享到:
相关推荐
Angle是Google为了解决在不同平台上实现OpenGL ES标准而开发的一个开源项目,它与Android操作系统密切相关,尤其是在2D游戏引擎的开发中起着至关重要的作用。Android作为一个开放源码的操作系统,其源码包含了丰富的...
Angle v1.0是一款专为Android平台设计的2D游戏引擎,它提供了高效且易于使用的框架,用于构建高质量的移动游戏。此源码库包含了所有必要的组件,从渲染引擎到物理模拟,帮助开发者快速实现游戏逻辑,提升开发效率。...
【Android 开源游戏引擎详解】 在 Android 平台上,游戏开发并不像一些初学者想象的那样困难,因为存在多款优秀的开源游戏引擎可供选择。这些引擎不仅提供了丰富的功能,还能帮助开发者快速构建游戏,降低开发难度...
【开源Android游戏引擎】是指那些允许开发者自由使用、修改和分发的Android平台游戏开发工具。对于初学者而言,这些引擎提供了构建游戏的基础框架,减少了从零开始编写游戏代码的复杂性。以下是一些常见的开源...
八款开源 Android 游戏引擎 Android 游戏开发是一件复杂且需要投入大量时间和精力的工作,特别是对于初学者来说,选择合适的游戏引擎尤为重要。下面我们将介绍八款常见的 Android 游戏引擎,帮助开发者更好地选择...
Angle v1.0是一款专为Android平台设计的2D游戏引擎,它提供了丰富的功能和高效的性能,使得开发者能够快速构建高质量的2D游戏。通过分析这个开源项目,我们可以深入理解Android游戏开发的核心技术和最佳实践。 1. *...
【Android开源麻将游戏】——Andjong深度解析 Andjong是一款基于Android平台的开源麻将游戏,其源代码提供了丰富的学习资源,对于想要深入了解Android游戏开发,尤其是麻将类游戏开发的开发者来说,是一个不可多得...
总之,使用Bigplanet进行开源Android离线地图开发涉及众多技术和概念,包括地图数据处理、渲染、交互、定位以及性能优化等。通过深入学习和实践,开发者可以构建出功能强大的离线地图应用,满足用户在各种场景下的...
《安卓Android源码——Anglev1.0_2D游戏引擎》 在移动游戏开发领域,Android平台以其开源、开放的特性,吸引了大量的开发者。其中,2D游戏引擎是开发者们构建游戏应用的重要工具,它们简化了游戏开发的复杂性,使...
《Android游戏源码解析——基于“忍者快跑”》 在移动开发领域,Android平台以其开源、灵活的特性吸引了大量的开发者。对于Android游戏开发,理解并分析源码是提升技术能力的重要途径。本篇文章将深入探讨“忍者快...
* Android 开源项目第二篇——工具库篇 * Android 开源项目第三篇——优秀项目篇 * Android 开源项目第四篇——开发及测试工具篇 * Android 开源项目第五篇——优秀个人和团体篇 Android 性能调优和开源代码知识...
开源中国发布的Android手机应用最新版本客户端源码是一份极其珍贵的学习资源,对于想要深入了解Android开发的工程师来说,这是一个不可多得的实践案例。通过研究这份源码,我们可以深入理解Android应用程序的设计...
首先,这个资源包的名称揭示了它的核心内容——对Android开源项目的分类汇总。这意味着它可能按照项目类型、功能、技术栈或者目标用户群体进行了系统化的整理,便于开发者快速找到自己感兴趣或需要的项目。常见的...
【标题】"安卓Android源码——rokon_src_2-0-3_游戏引擎.zip" 涉及的是一个专门针对安卓平台的游戏引擎——Rokon的源代码,版本为2.0.3。Rokon是一个开源项目,旨在简化在Android设备上开发2D游戏的过程,提供了一套...
《安卓Android源码解析——深度探索Zirco-browser:打造超越海豚的开源浏览器》 在移动设备领域,安卓Android操作系统以其开放性和可定制性深受开发者喜爱。在众多的安卓应用中,浏览器作为用户接触互联网的主要...
在Android平台上,游戏开发是一项非常活跃的技术领域,其中“冒险游戏——胜利大逃亡”是一个典型的游戏开发实例,它能够帮助开发者深入理解Android游戏开发的关键技术。本实例以冒险为主题,融合了策略、动作和解谜...
【Android源码——oschina-android-app(开源中国)】是一个包含开源中国Android应用程序的源代码压缩包。这个项目是开源的,允许开发者深入研究和学习Android应用开发的实践技巧和最佳实践。通过分析这个项目的源...
"安卓Android源码——[安卓开源]Oschina客户端.zip" 这个标题表明我们正在讨论的是一个关于安卓(Android)操作系统的开源项目,具体来说是Oschina客户端的源代码。Oschina是中国的一个知名的开源技术社区,它提供了...