最近一直在做SLG游戏的性能优化,趁着手还热乎,把自己一些心得总结一下。

目前SLG是基于Flash制作的,语言当然是AS3.0,目前Flash虽然要死要死的了,可是他背后的AS3.0是非常强大的,目前很多H5引擎开发的API都是吸收了很多AS语法规则。

首先贴出一个性能优化的标准

另外玩家对于游戏性能的一个直观感受有以下几方面:

1.Loading时间

2.进入游戏后拖屏的流畅度

3.内存的占用

下面从这三个方面分析下优化的点以及方案

一、Loading时间

我们可以将Loading时间拆分为三部分:(1)美术资源(2)配置资源(3)数据及对象初始化

一般资源我们都采用即用即加载的方案,配置资源一开始只加载初始场景需要的,这时候就会根据角色等级或者某个判定标准来加载资源,美术资源、数据及对象初始化同理也需要根据这个条件来判断,进入游戏后再按照需要加载资源,这时我们就需要一个资源管理器,对于已经加载的资源进行管理,可以使用引用计数来判定一个资源是否在被使用,如果没有被使用即时释放掉。

二、拖屏的流畅度

(1)事件

SLG类游戏,通常会有一个大地图,玩家通过拖动屏幕移动视角,在AS中一般使用事件通知客户端摄像机视角改变,这其中涉及了大量的数据更新,以及服务器与客户端的数据交换。AS中的原生事件对于性能的消耗是很大的,这时候我们需要变更思路,其实在很多插件中对于原生事件都做了封装,比如JQuery,LayaBox都对于事件进行了封装,我也使用了一个包来替代AS中的原生事件Signal,Signal类似于C#中的事件委托机制,如果我使用AS中的原生事件,我要对每个对象添加事件监听,80000个对象就是80000个事件监听,一旦事件派发,就是80000个冒泡,但是使用Signal在管理器监听,只需要一个监听就可以达到同等效果,可想对于性能是多么大的节省。

(2)与服务器通讯时机

我们在玩SLG或同类游戏的时候,拖屏的时候不会立刻更新所有信息,往往是停下来的时候会全部更新,这里面其实就是对于拖屏的时候控制了向服务器的发包频率,如果一旦收到事件,就向服务器请求,不光服务器吃不消,客户端收到服务器消息的时候也会形成阻塞,不能做到更新,在一帧类的更新过于频繁,会导致帧率急剧下降,因此大多数的选择是使用延迟帧调用更新,将逻辑处理与界面渲染分帧处理,这样会使游戏流畅度提高也降低了服务器压力。

三、内存占用

内存泄漏真是最让人头疼的问题,特别是在项目一开始没有做好内存管理的时候,后期优化真的是蛋疼的要命,一般游戏内存占用分为两块:(1)资源(2)对象

前面已经说过资源的管理需要一个专门的管理器来管理加载了的资源,以便及时对于未使用的资源及时释放。

对象的管理同样如此,游戏中对象一般又分为两类:(1)UI对象(2)游戏对象

(1)UI对象

UI对象的管理一般是使用一个MVC框架来进行管理,所有UI都是基于这个框架写出来的,如果大家有兴趣了解我平时喜欢用的UI框架可以在我Github下去复制下来看看:https://github.com/dengxuhui/AircaftBattle

这里面的UI框架就是我任何一个项目都用的UI框架,这个小项目有兴趣可以扩展,我现在已经没有更新这个项目了。

UI框架就不多说了,资源一般都是从资源管理器获取的,对象使用后直接释放。

(2)游戏对象

游戏对象我们可以笼统的说除了UI都是游戏对象,游戏对像我们一般就采用一个工厂来创建以及管理,每个游戏都会存在一个资源池,因为很多对象的高频创建销毁,资源池是一个很好的解决方案,不过一旦资源池没有管理好就适得其反,对于资源池的一般使用引用计数来实现,缓存方式有很多,根据不同情况也有不同适用方法,之前我看过一篇文章写得挺好的,之后找到贴上来,我这里就别瞎bibi,我只说说大概原理,我们通过一个游戏工厂作为游戏物体的创建以及释放的唯一接口,创建时先从资源池寻找复合对象,如果没有创建新对象,如果有直接使用,避免调用对象构造函数,当我们不用这个对象的时候,调用工厂的对象释放函数,工厂将这个对象放到资源池中,以备后续使用。这里只讲了大概流程,其中涉及细节并未讲到。

SLG游戏性能优化个人总结相关推荐

  1. Unity移动端游戏性能优化简谱之 以引擎模块为划分的CPU耗时调优

    <Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...

  2. 游戏开发43课 移动游戏性能优化1

    1. 前言 很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章. 涉及到具体优化技巧时,博主会尽量阐述原理和依据,让读者知其然也知其所以然.要完全读懂这 ...

  3. 极光会客厅:大型H5游戏如何登陆微信小游戏及游戏性能优化分享

    上周末,由极光网络主办的首期"极光会客厅"正式开门迎客.在本次的"2D小游戏开发实战技术沙龙"上,极光网络客户端主程陈策以及极光网络项目总监陈源向一众与会者分享 ...

  4. 白鹭引擎王泽:重度H5游戏性能优化技巧

    9月15日,无惧17级台风"山竹",320名开发者齐聚广州贝塔空间共同探讨"怎样做一款赚钱的小游戏".针对众多开发者关心的重度H5游戏性能优化技巧,我们整理了现 ...

  5. 白鹭引擎王泽:重度H5游戏性能优化技巧标题的文章

    我们的引擎架构师做某一沙龙活动的演讲速记,纯纯的干货,分享给大家. 王泽:各位开发者下午好!我叫王泽,是白鹭引擎的首席架构师. 今天给大家分享的题目是<重度H5游戏性能优化技巧>.之所以决 ...

  6. 【Egret优化分享】白鹭引擎王泽:重度H5游戏性能优化技巧

    本文转自:https://mp.weixin.qq.com/s/GIzXA51D7_hMqajCRuJE2g 9月15日,无惧17级台风"山竹",320名开发者齐聚广州贝塔空间共同 ...

  7. 移动游戏性能优化通用技法

    1. 前言 很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章. 涉及到具体优化技巧时,我会尽量阐述原理和依据,让读者知其然也知其所以然. 要完全读懂这 ...

  8. Unity移动端游戏性能优化简谱之 常见游戏内存控制

    <Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...

  9. 原生canvas游戏性能优化

    微信小游戏在 17 年末推出,再次带火了 H5 小游戏的开发,本公众号准备一些 H5 游戏开发的文章,奉献给读者,想做小游戏的可以练练手,没时间做的可以学习下游戏常用的一些方法和概念. 本文来自 li ...

最新文章

  1. php安装gb,php安装程序的原理
  2. 201209阶段二FFmpeg转码
  3. C++Primer模板
  4. (29)System Verilog进程间同步(旗语semaphore)
  5. .NET下载文件报错System.UnauthorizedAccessException的解决方法
  6. linux文件取消root权限,使用root权限无法删除linux中文件的解决方法
  7. PID算法理解和代码以及PID调参
  8. uni-app项目的开发和发布流程(包括开发版、体验版、正式版)
  9. 中国科技网宽带接入服务
  10. python ocr文字识别竖排繁体_(以繁体竖排为例)OCR各种软件使用效果对照..docx...
  11. java中的lt;和gt;分别是什么意思
  12. 订阅号和服务号有什么区别?哪种更好?企业该如何选择?
  13. linux中raid扩容,Linux停软Raid1扩容方案
  14. 使用正则表达式批量去除第一个逗号前的内容(含逗号)以及去除最后一个逗号后面的内容
  15. HTML5期末大作业:体育篮球网站设计——篮球活动(9页) HTML+CSS+JavaScript 校园篮球网页作业成品 学校篮球网页制作模板 学生简单体育运动网站设计成品
  16. 浅谈企业宣传片对于企业的意义
  17. Sublime Text 安装 Helium 插件搭出Jupyter Notebook的效果
  18. 小议并实战go包------顺便说说go中的GOROOT,GOPATH和src,pkg,bin
  19. Testin云测试-标准兼容性测试
  20. centos6 安装bbr_centos6 安装 BBR加速教程

热门文章

  1. python列表去掉逗号_python – Scrapy crawler,从字符串中删除逗号
  2. (CVPR-2020)动态卷积:注意力卷积核
  3. 学计算机专业选i5四核还是6核,计算机CPU的4核和6核有什么区别?
  4. 工程项目失败案例_失败工程
  5. Java 如何从一个 List 中随机获得元素
  6. img 的 alt 与 title 的异同,还有实现图片懒加载的原理
  7. ebs xml开发 html,EBS excel模板xml publisher开发
  8. dlink 备份文件_dlink基本配置命令
  9. 文科生学python_一个文科生的python心路历程
  10. 括号匹配问题(数据结构)