`
须等待
  • 浏览: 213423 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Andengine 学习笔记 - 山寨保卫萝卜的总结

阅读更多
出于练手的目的,山寨了一个保卫萝卜,过程中有一些经验和教训,记录一下,备忘。

一、框架设计
对于游戏来说,引擎已经替我们完成了底层绘图的操作,而我们只需要管理图片的加载和生成逻辑上的各个实体,这样整个游戏很好模块化:资源模块、实体模块、管理模块。

1、模块之间的访问会比较频繁,所以使用的是中介者模式,以减少模块之间的耦合;
2、管理模块中对于被管理的所有实体,必须池化以减少内存开销;
3、各个模块必须有完整的初始化和销毁的逻辑,因为游戏不同于应用没有Activity的概念,游戏中有很多切换相当于局部的销毁和重新初始化,这块的逻辑不完成引起的后果不是内存问题就是性能问题;
4、对于不同场景的资源,切换一个场景就应该释放当前场景的资源,因为资源是由引擎来管理的,实际上也是受GPU限制的,就算不主动释放也不能像普通的缓存一样一直存在在内存里,并没有太多益处,而在reload和一些特定的场景里还会引起内存问题,所以实际上释放资源是更好的实践;

二、性能调优的实践
游戏的原型开发完成之后不可避免的遇上了很多性能瓶颈,也学到了很多经验

1、池化的对象管理和工厂类统一生成对象。严格的控制对象的生成是很重要的,因为在游戏中,一不小心就会产生大量的对象,随后引发的gc问题也好OOM问题也好都会比较棘手,所以在实践中干脆窄化对象的生成,所有的对象一律从工厂中生产并且池化,最大限度的减少这块的内存消耗,提高性能;
2、一切疑似的耗时算法都应该异步进行。这里的疑似,就是应该保持对耗时算法的警惕性,因为并不是每个耗时算法都那么明显。在开发过程中,就发现风扇塔的子弹在行进过程中可以攻击多个怪,每次都扫描一次怪物堆,因为存活的怪物堆里的怪物不多,所以当时完全没有考虑异步的问题,结果就是当风扇多起来之后游戏变得巨卡,才发现到不停的搜索遍历还是会导致性能问题。解决方案也很简单,把多次攻击的子弹搜索逻辑加入到异步的任务里,游戏界面立马就不卡了;
3、摒弃一切卡主线程的行为。有一个性能问题,源自于一个小小的synchronized关键字,开始都没有注意到这个关键字,后来证明,即使那个方法没有多线程访问,加上了synchronized关键字以后jvm在处理上还是会引起效率问题,去掉synchronized以后性能问题解决,再次证明,主线程只需要处理逻辑,而其他同步或耗时的都要用异步的方案来处理。
4、遇上一个问题,切换场景gc时间略长且不等,导致绘制完成后的第一帧的间隔时间很长,引起一系列问题,后来想到一个解决方案:跳帧,直接跳过不正常的那一帧,目前正常,但是不确定会有什么问题。
5、实际上移除Entity的操作是一个开销较大的操作,因为要对引擎加锁,如前所释,实践中应该尽量避免加锁的行为,这里加锁可能导致移除大量对象时会卡主线程导致黑屏之类的问题,所以尽量的少移除,可以用隐藏的方式来替代移除
6、load资源是一个耗时的动作,是采用异步的方法来加载,但是在实践中遇到的一个问题是,游戏进入loading界面和加载资源是并发进行的,而加载资源这个动作可能引起大规模的gc,导致stop the world,从界面上表现就是黑屏而不显示loading界面,这样是比较难看的,于是想到一个办法:在每一次启动加载资源线程的时候先sleep一个很短的时间,这样可以保证loading界面先被绘制出来再开始加载,之后就算是gc引发stop the world在界面上也完全看不出来,这是在实践中解决问题的一个很好的方案。
0
1
分享到:
评论

相关推荐

    andengine-physicseditor-extension.jar

    官方版本,亲测可用

    AndEngine游戏-DeliveryBoy-源代码

    《AndEngine游戏-DeliveryBoy-源代码》是一个用于学习AndEngine游戏开发的示例项目,其主要内容涵盖了AndEngine的基本使用、游戏逻辑构建以及资源管理等多个方面。AndEngine是一款流行的开源Android游戏开发引擎,它...

    Andengine-Android-Studio:用于游戏引擎的 Android Studio 模块,流行的标题和引擎

    Andengine-Android-Studio是将Andengine集成到Android Studio的模块,方便开发者在现代的Android开发环境中进行游戏开发。 Andengine的主要特点包括: 1. **轻量级**:Andengine的体积小巧,性能高效,对设备资源...

    andengine-gles2.jar

    AndEngine 2013-3-12 最新Jar包,直接拉进项目libs即可,可查看源代码

    AndEngine-GLES2-Example Eclipse Android 工程

    AndEngine 2013-2月 最新Example,直接导入Eclipse即可,API15, 环境 Android 4.0.3

    AndEngine范例-源码

    总之,AndEngine范例源码是学习AndEngine游戏开发的宝贵资源,通过深入研究这些示例,开发者可以快速掌握AndEngine的使用技巧,提升自己的游戏开发能力。同时,也可以借此了解2D游戏开发的基本流程和常见问题的解决...

    andengine-skeleton-android-studio:编译andEngine和andEngineBox2DExtension的就绪版本

    #AndEngine准备使用骨架 ##来自Charles Smartt Jr.和Jordan Dickow ##摘要以下是andEngine和andEnginePhysicsBox2DExtension的可编译就绪源代码集,仅在Android Studio中使用。 JNI本机扩展已被编译并包含在内,而...

    AndEngine-GLES2

    AndEngine-GLES2是一款专为Android平台设计的开源2D游戏引擎,它为开发者提供了高效且易用的工具,用于创建各种2D游戏。这款引擎以其简洁的API和丰富的功能而受到开发者的欢迎,尤其值得一提的是,曾经风靡全球的...

    AndEngine-GLES2源码

    学习AndEngine-GLES2的源码,你将了解到如何使用OpenGL ES 2.0进行图形编程,如何管理游戏状态,以及如何实现高效的性能优化。这不仅可以提升你的Android游戏开发技能,还能帮助你理解和解决实际开发中遇到的问题。...

    AndEngine游戏开发指南-初级篇.pdf

    在学习AndEngine游戏开发的过程中,开发者可以通过个人博客、QQ、微信群等多种渠道进行交流,共同解决问题,也可以获取他人分享的图片、代码片段等资源。同时,开发者可以参考相关的教程、下载示例项目如...

    AndEngine_分析之三-----AsyncTask_BaseActivity备忘

    ### AndEngine分析之三——AsyncTask与BaseActivity深入解析 #### 一、AsyncTask概述 在AndEngine项目中,为了实现界面更新等操作时避免主线程阻塞的问题,使用了`AsyncTask`来处理后台任务。`AsyncTask`提供了一...

    Andengine笔记

    AndEngine提供了一些官方示例项目,这些示例可以在GitHub上找到,对于学习和理解引擎的工作原理非常有帮助。AndEngine有三个版本:GLES1、GLES2和GLES2 Anchor Center,其中GLES1已不再维护,GLES2 Anchor Center是...

    AndEngine_分析之二-----BaseGameActivity. 中文

    AndEngine 中的 BaseGameActivity 详解 BaseGameActivity 是 AndEngine 框架中一个关键的组件,它是游戏的基础,负责管理游戏的引擎和SurfaceView。它继承自 BaseActivity,并实现了 IGameInterface 接口。 ...

    AndEngine-document.docx.zip_andengine_android

    通过学习AndEngine,开发者可以快速构建各种2D游戏,从简单的休闲游戏到复杂的动作冒险游戏,都能轻松应对。 总的来说,AndEngine是一个强大且全面的Android游戏开发框架,它的易用性和灵活性使得它在游戏开发领域...

    AndEngine_分析之一----载入资源 这个是英文的

    在Android游戏开发中,AndEngine是一个非常流行的2D游戏引擎,它允许开发者创建高质量的图形和交互式体验。本文将探讨如何在AndEngine中实现后台加载资源,同时展示一个使用AsyncTask来处理加载过程的示例。 在...

    andengine源码及demo

    AndEngine源码的分析和理解对于想要深入学习Android游戏开发的人来说至关重要。 1. **AndEngine基础** AndEngine的核心在于其强大的渲染引擎,它支持精灵(Sprites)、纹理(Textures)、纹理区域(Texture ...

    AndEngine游戏开发示例

    通过学习AndEngine游戏开发示例,开发者可以掌握2D游戏开发的基本技巧,包括场景构建、精灵动画、物理引擎应用以及用户交互处理。无论你是初学者还是有经验的开发者,都能从中获益,快速构建出自己的Android游戏。

    andEngine > 学习1

    通过深入学习AndEngine-GLES2的源码,开发者可以更好地理解游戏引擎的工作原理,进一步提升开发技能。在实际开发中,结合标签中的“源码”和“工具”,开发者可以自定义扩展,打造符合自己需求的游戏框架。

    andengine2.0开发的小游戏

    通过分析源代码和阅读教程,学习者可以掌握AndEngine的基本用法,例如设置场景、添加实体、实现物理行为、处理用户输入和更新游戏逻辑。 总的来说,这个压缩包文件提供了一个很好的机会,让对AndEngine感兴趣的...

    AndEngine学习

    ### AndEngine学习:环境配置与扩展包导入详解 AndEngine是一款专为Android平台设计的开源游戏开发框架,因其高效、灵活以及丰富的功能而备受开发者青睐。本文将详细解析AndEngine的环境配置步骤以及如何导入其扩展...

Global site tag (gtag.js) - Google Analytics