游戏中的资源管理

来源:互联网 发布:淘宝优惠券短连接 编辑:程序博客网 时间:2024/05/16 19:08

游戏中用到的资源,何时加载,何时释放,有很多种方式可以对其进行管理,以下讨论一种比较常见的方式,使用引用计数进行管理。

比如说需要对图片资源进行管理,定义图片类为CPicure,图片管理类为CPictureMgr,此类的接口CreatePictureFromFile负责图片的加载,为了防止Client忘记调用销毁图片资源的接口,我们就不提供图片销毁接口,而是返回一个CPicture的引用计数智能指针,这样,资源管理的责任就交给了Client,当Client保存的CPicture对象的生命周期到了的时候,资源就会自动释放(当然,前提是Client也是使用的引用计数智能指针)。这样,每次调用CreatePictureFromFile就会返回一个不同的对象,即使两次传入的是同一个文件。但多数时候,我们可能不会对加载的图片进行修改,所以我们期望,如果Picture已经加载了,就不再重新加载,而是直接返回之前的Picture指针,这就需要我们在CPictureMgr中保存一个已经加载的图片的指针列表,如果我们保存一个引用计数指针列表,那么当外部引用Picture的对象生命周期结束时,Picture并不会被释放,应为列表中还有一次对Picture的引用。这样,不再使用的资源就不能及时释放。解决方法是可以使用弱引用,这样如果发现列表中的某个弱引用访问到的指针为NULL了,就把它从列表中删除。

原创粉丝点击