游戏开发者需要注意的4个内存使用问题

从销售角度来看,你的全新手机游戏总是应该适用于今天人们所使用的大多数设备。“大多数设备”可能会让开发者感到惊讶。在 2015 年 1 月,世界各地的手机用户数已经达到 36 亿人。所以开发者的工作便是让游戏/应用能够适应这些设备的种种硬件约束条件。开发者们在开发像游戏等需要耗费内存的软件时需要进行更多思考。通过编写这篇文章,我希望能够帮助一些不了解技术的人进一步理解一些内存问题,而这也是他们在致力于 2D 游戏项目时需要考虑的内容。

一、内存泄露:

内存泄露指的是未被释放的分配内存块。

类比:让我们想象你在一个拥有 3 个方形储物柜的房间寻找一个储物柜。

lockers (from gamecareerguide)

lockers (from gamecareerguide)

1. John 和 Danny“需要”储存自己的装备,而一个储物柜便足以满足他们每个人。所以现在我们拥有 2 个已被使用的储物柜,以及 1 个闲置的储物柜。

2. 这时候 John 需要储存他的头盔,并且不再需要他之前储存的装备。所以现在最理想的情况是他应该拿出之前的装备并将头盔装进去。但是他却向管理者请求另一个储物柜并希望将头盔放在全新储物柜中。从逻辑上看,在这之后所有的储物柜便都满了。而现在的 John 会忘记自己储存在第一个储物柜中的装备。

3. 现在 Danny 需要储存 2 个头盔并需要 2 个储物柜,所以他决定拿掉自己的装备并空出 1 个储物柜。然后他向管理者申请了一个新的储物柜,但是因为所有储物柜都满了所以遭到了管理者的拒绝。

在这里,即使 John 从储物柜中拿掉无用的装备,Danny 也不能再使用多出来的储存空间。

二、相同纹理的多个例子:

一个纹理将占用宽度*高度*4(游戏邦注:红色,绿色,蓝色和透明度各占据 1 个字节)的储存空间。所以一张 512×512 规格的图像将占据 1.05 兆的内存。而同样的纹理将占据其 3 倍的储存空间,也就是 3.15 兆。所以如果我们想要使用这些图像作为纹理的话我们便需要准备多出 3 倍的内存。

类比:让我们以一张呈现出你最喜欢的角色“buttman”并且不能无限次使用的方形贴纸为例。

sticker (from gamecareerguide)

sticker (from gamecareerguide)

你需要将这个新角色呈现给 3 个不同的人。所以你能够:

1. 获得 2 张一样的贴纸,获得 3 个木质框架能够在上面贴贴纸,并且你将把这些木制框架递交给那 3 个人。

2. 让那 3 个人去获得属于自己的木制框架并让他们将贴纸贴到框架上。

第 2 个例子适合我们,因为我们可以反复使用同样的贴纸。这也适用于软件程序中,即所有人可以同时想到 buttman。

三、不必要的迭代:

比起多次调用,在资源中调用 for/while 循环更简单。你可以在一个循环中处理多个任务。

类比:你是一个间谍,并需要向 3 个遥远的不同场所运输包裹。并且你需要从这 3 个不同场所的不同 boss 那收集到重要的秘密信息。

因为你是从不同 boss 那接到这些任务,所以你可以:

1. 根据不同 boss 去分配你的任务。例如你可以驾车前往所有的这 3 个场所并先完成 boss A 所分配的任务,然后再驾车前往同样的 3 个场所完成 Boss B 所分配的任务。反之亦然。

2. 根据不同场所去分配你的任务。例如你可以先驾车前往第一个场所,递交包裹并获得信息,然后再驾车前往下个场所。

如果你所制定的任务计划是像第 1 种情况那样的话你便是一个愚蠢的间谍,因为你需要花费更多时间和资源去完成同样的任务。

四、在内存中保留未使用的对象:

任何时候都只有一定的对象能够被使用或出现在屏幕上。因为我们拥有优先的内存空间,所以任何被留在内存里的额外对象都是在耗费资源。

类比:你需要将一辆马车从A点推到B点。让我们假设如果马车未负载任何东西或者载着最轻的东西,这便是一个较简单的任务。但是因为你喜欢啤酒,所以你选择用马车去载一桶啤酒,从而加重了自己任务的难度。

所以在这里的最佳解决方法便是放弃你所深爱的啤酒。

这里所列出的问题绝对超过我在一篇文章中能够写下的内容。作为一名开发者,你应该尽快识别这些问题并使用有效的解决方法。先克服这些挑战再发行产品是真正让人兴奋的游戏开发过程。每个人每一天只拥有 24 个小时。对于我们而言,人们能够花费这些宝贵的时间去尝试我们所创造的内容便是推动着我们去开发游戏的最佳动力。
全部评论
游戏开发前景很好,,市场很大,加油各位
点赞 回复 分享
发布于 2015-10-07 10:47

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
06-18 13:28
已编辑
门头沟学院 Web前端
爱睡觉的冰箱哥:《给予你300的工资》,阴的没边了
点赞 评论 收藏
分享
找到实习了 给了150一天 但是说是低代码 值得去吗
码农索隆:是在没实习,可去,待个一两周,不行就润呗
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务