Articles of 记忆效率

加载几个缩放的位图和增长堆或绘制比例位图和FPS减less?

在我的游戏中,我使用surfaceview和Canvas在屏幕上绘制精灵,以便在所有屏幕大小中进行拼图 :我testing两种方式: 第一 :当canvas想要在屏幕上绘制Framebuffer(最终位图)时,通过使用缩放这个framebuffer canvas.drawBitmap(framebuffer, null, dstRect, paint); 但每秒帧数(fps)减less和游戏不运行平滑(更小的屏幕=更stream畅的游戏运行) 二 :如果我加载并缩放游戏开始时的所有照片到屏幕大小 – >这样增加堆使用这个: canvas.drawBitmap(framebuffer, 0, 0, paint); 所有的图像是最大480×800像素 (****没有规模的图像,分配1.5 MB和一个1080 * 1920的设备规模分配约10MB *****) 让我的游戏使用 kilobolt框架

使用TexturePacker更正Moai的纹理格式

我们将使用TexturePacker为Moai游戏创建纹理地图集。 我想知道什么正确的纹理格式和图像格式是专门用于摩艾。 我应该只使用PNG和RGBA4444,或者你可以使用PVR和PVRTC4? PVRTC4格式似乎创建了一个纹理,表明较less的RAM使用,但我不确定我们是否可以使用这种格式。

一次加载所有位图或只在需要时加载?

我开始在Android的2D游戏中获得相当数量的位图。 我用3种颜色加载它们以节省一些内存,但是当按下“开始游戏”的时候,我加载了所有的内存,即使是那些不能用于另外5-6级的内存。 而且各级之间没有切换活动,它们都是通过控制状态来使游戏更加stream畅。 我缺乏memory management方面的知识,所以任何建议或首选的方法都会受到极大的关注。 例如,如果级别1的位图不需要再次使用,是否需要手动将它们从内存中删除,或者GC是否可以为我做这些? 另外,有没有人知道重新使用子弹的好方法? 我想像创建新的内存会对内存产生影响吗? Cus现在,当我运行我的游戏时,即使我禁用了80%的游戏堆大小,仍然没有任何意义,所以我在16mb堆处,所以我显然错过了一些东西。

哪些编码问题会对游戏的性能产生重大影响?

我刚刚完成了一个Java游戏的2D游戏,我已经做了一段时间了。 我发现,在一些电脑上运行良好,而在其他电脑上(一般情况下并不是特别慢),游戏运行速度稍慢一些,每隔一段时间稍微中断一次。 不完全平滑。 由于我是制作游戏的初学者,可能由于我没有提前计划游戏的所有内容,游戏的代码相当长,笨拙,可能效率低下。 我想在我的下一个项目中改进这一点。 所以我的问题是 – 一般来说, 一个普通的2D游戏在电脑上放慢的主要原因是什么? 下一次,为了devise一个高效的游戏,我最关注的是什么? 做less量课程? (即使课程是小的?) 避免重复的代码? (即使是小部分的代码,如短的if语句)。 避免太多的线程运行? 还要别的吗? 显然,以上所有建议都是为了高效的程序。 但是我想知道,游戏代码中的内容对于创建高效的应用程序尤其重要,哪些内容不太重要,也不会节省大量的内存。 任何建议都会受到欢迎 – 可能是关于游戏devise,或者更具体的编码问题。 我不知道这是否重要,但请注意,我主要是在谈论实时游戏,使用“游戏循环”不断更新游戏和显示。 谢谢

用于复杂,密集型2Dgraphics的现代硬件有多强大?

我正在着手大规模(图像质量,文件大小,高帧数)项目。 我仍然在研究这个基本的引擎,但是在开始testing之前,我有一个很大的问题需要回答。 (这需要大量的工作来testing,可能会失败,不得不重新创建所有精灵表,所以如果我错了,答案可以帮助我节省数周的工作。) 这个游戏完全是二维的,具有2.5D的视野。 我想最终有40个animation,都必须在8个方向animation。 我希望每个方向/animation都有自己的精灵表。 这相当于数百个spritesheet和数千个文件。 在明显的解决scheme之前“降低文件大小的质量!” 我想尽一切可能来防止质量下降,animation帧数和图像大小。 在我的解决scheme之前,一个角色的内存(LOL!)是350MB,但是这个角色很快就被固定到了每个角色10-20MB。 那是…如果我在所有方向(8)加载所有(40)animation。 所以如果我把320张精灵表加载到内存中,那么每个内存中的字符数就会非常大。 我的问题是这样的: 在任何给定的点上,我应该将多less(总精灵表)加载到内存中? 我只能将CURRENT spritesheet(Direction + Animation)加载到内存中吗? 现代硬件足够快,可以随时交换纹理吗? 玩家可以随时改变方向。 这将改变整个spritesheet。 同样的animation。 因此,在一瞬间,游戏将不得不加载一个特定的新的spritesheet,卸载旧的(或最终卸载),并在一瞬间渲染。 只要他们在实时游戏中animation或改变方向,就必须为每个角色完成一次。 幸运的是,屏幕上同时显示的字符数量将受到2D游戏的限制,但是我希望能够在平庸的计算机上最大限度地减less性能问题。 是纹理交换,文件加载,从硬盘和内存即时渲染 – 所有这些与现代硬件如此之快,我什至不需要担心任何这一点? 我只是不想在所有这些spritesheet(从我已经拥有的成千上万的图像)工作,只是为了找出我的performance将是可怕的,必须重做所有的spritesheets。 即使要testing,因为我有一个分层设备系统,创建spritesheet是一个耗时的任务。 也就是说,直到我find一个解决scheme来处理这些更快(自动化,我做手动目前,使用程序)

我怎样才能有效地存储工作记忆瓷砖地图?

我一直在研究不同的基于磁贴的项目,但从未真正困扰于高效的记忆方式。 每个瓷砖都是由一个瓷砖类,代表以下几点: 瓦片的X和Y ID 实体布尔值 实体离开或input瓦片时的事件 graphics数据 尺寸 但特别是现在,当使用一个基于组件的系统,其中一切都是一个实体(有一些基本function已经占用一些内存),我已经开始遇到内存问题。 我开始研究现有的瓦片引擎,并注意到它们中的很多甚至没有瓦片类,只是使用一个整数数组。 我想你可以使用arrays的位置索引和graphics的实际整数值。 但是,如何将这个瓷砖的其他数据存储? 例如事件,会从arrays外部保存他们? 这意味着你需要为每一个你想要保存的财产提供一个清单,这听起来像是一个痛苦的屁股。 知道他们如何在一个更有限的平台上处理这个问题可能是件好事,比如SNES?

Java – 将背景音乐加载到内存中

我目前正在用Java开发一个游戏,其中包含10首.ogg格式的轨道,每个轨道大小为1-2 MB。 为了能够在游戏中快速和轻松地在这些轨道之间切换,在游戏开始之前,我通过创建十个Clip类将它们全部加载到内存中。 不幸的是,可以理解的是,预加载这些轨道会将应用程序的CPU使用率从大约61 MB增加到340 MB。 因为我一次只玩一首曲目,所以我只能做到这样,只有一个Clip在内存中,并且在轨道需要改变时被破坏。 也就是说,这意味着当发生这种情况时,我必须在加载Clip时挂起游戏,或者在不希望的沉默的几秒钟内在不同的线程上执行此操作。 有一个更聪明,更传统的方式来处理大型BGM文件,还是我只需要select我的毒药?

Unity Profiler – 什么会导致GC Alloc中PlayerEndOfFrame有10-16MB?

我找不到有关“PlayerEndOfFrame”的文档。 当然这是一个框架的结束,但是会导致GC Alloc变得如此之高? 这是使用IP连接到统一性分析器的远程计算机上的debugging版本生成的分析器结果。

iOS自定义内存分配器

我即将开始编写iOS游戏,我将主要使用C ++ / C作为核心游戏逻辑。 我真的很喜欢预先分配游戏中的所有内容,尽量避免dynamic分配。 用我自己的C ++ / C代码,这不是什么大不了的事情。 但是有一些ObjC库,我想重新使用,我不知道如何注入我的自定义内存分配器基于cocoa的类。 在cocoa我有什么中央“注射点”吗?

如何处理大开放的世界?

在大多数游戏中,整个世界都足够小,以适应记忆,但是有些游戏不是这种情况,这是如何归档的,即使世界如此之大,甚至是dynamic的,游戏如何仍然stream动? 当玩家移动时,世界如何改变记忆? 这方面的例子包括TES游戏(天际,湮灭,晨风),MMORPG(魔兽世界),暗黑破坏神,泰坦探秘,矮人要塞,孤岛惊魂。