数据结构学习笔记(一) 双列表管理应用
来源:互联网 发布:老人去世六年无人知 编辑:程序博客网 时间:2024/05/26 12:54
在游戏中免不了需要对怪物进行动态的生成,死亡的时候要对其销毁,这样就是一个怪物的生命历程循环过程。如果按照一般的游戏设计方式,到了一定时间就进行怪物的刷新,如果每次都需要动态的new一个怪物出来,死亡后又要动态的销毁,这样就会大幅度降低游戏的性能。尤其是在怪物一同刷新和一同的销毁的时候,玩家有可能会出现卡机情况,那么如何避免这种事情的发生呢?
为了确保性能这里我们只可以牺牲内存来确保性能,如何利用内存来确保即使同时刷新怪物的时候都不会卡呢?这里我就介绍一种非常简单好用的方法,双列表的方式进行管理。利用List进行内存的管理,这样就可以避免重复的new一个新资源。
1、避免了频繁使用的时候产生的大量内存碎片,从而降低游戏运行效率。
2、避免了内存的泄露(C#一般不会有这种问题,但是C++很容易出现这个问题)
3、便于资源的统一回收和管理。(在场景切换的时候,我们可以统一释放怪物的资源)
这里我就用一个简单案例进行讲解:
首先我们要有一个简单的怪物属性类或者结构体,如图所示:
其次需要一个列表来存放场景内还活着的怪物,如下图所示:
其次另一个列表来存放死亡后消失的怪物,如下图所示:
再来就是一些简单的添加或移除列表元素函数即可,这样简单的双列表就基本完成了,代码就直接放出来:
using UnityEngine;using System.Collections.Generic;public class DoubleLinked{ public class CubeData { public GameObject cube; public int HP; public string name; } /// <summary> /// 活着的矩形 /// </summary> public List<CubeData> livecubes = new List<CubeData>(); /// <summary> /// 死亡的矩形 /// </summary> public List<CubeData> diecubes = new List<CubeData>(); public void AddLiveCubes(CubeData vlueData) { if(livecubes != null) livecubes.Add(vlueData); } public void AddDieCubes(CubeData vlueData) { if (diecubes != null) diecubes.Add(vlueData); } public void RemoveLiveCubes(CubeData vlueData) { if (livecubes.Count > 0) { livecubes.Remove(vlueData); } } public void RemoveDieCubes(CubeData vlueData) { if (diecubes.Count > 0) { diecubes.Remove(vlueData); } }}然后就是简单的应用了,首先要先去生成怪物,这里我就动态生产了5个Cube,然后将它们位置都错开避免影响我们的观察,代码如图所示:
这里你可以去断点或者自己Debug一下看看是不是所有的怪物都放入Live列表里面去了,如果没有出现错误的话,打印出来的效果如下图所示:
这样就表示4个Cube都存入到Live列表里面了。
下一步就写一个简单方法让Cube消失:
1、方法就是点击一下Cube
2、Cube就扣HP
3、当HP等于0的时候就死亡消失并且从Live列表移除,存入到Die列表里面去;
功能十分简单,代码就如图所示:
这样我可以测试测试一下效果如何了,效果如下图所示:
打印出来的正是存放到Die列表的两个怪物的名字,这表示怪物已经从live表里面移除了存放进die表里面了,如此一来怪物的一次简单生命历程也结束了。
那么如果需要新的怪物时候怎么办?可以先去查看Die表里面是否有我们需要的怪物,如果存在那么就将其转移到需要放置的位置、添加其属性后显示出来即可,如果没有的话我们就需要new一个出来然后存放到Live表里面进行统一的管理和销毁。
这种管理的方式并不一定要使用列表,存储的方式大可以根据项目进行改变,其中的管理方式都基本一致。
后面重新生成怪物的方法很简单,这里就不放出代码了(PS:我也没有去写,如果还是不懂得话就私信我)
- 数据结构学习笔记(一) 双列表管理应用
- Java数据结构应用——无序列表学习总结(一)
- 数据结构学习笔记(一)
- 学习笔记:数据结构(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记 (一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构学习笔记(一)
- 数据结构 学习笔记(一):基本概念:什么是数据结构和算法,应用实例
- 学习笔记(一)列表
- 数据结构学习笔记(一)
- 数据结构学习笔记一
- 数据结构学习笔记(一)
- 【Programming In Lua (2E) 笔记】5:使用C++为Lua编写扩展库(macOS上两种动态库格式的坑)
- redis总结
- 【面试题45】约瑟夫环问题
- 2016年终总结——回顾实习
- poj 1321 棋盘问题 (dfs 回溯)
- 数据结构学习笔记(一) 双列表管理应用
- 性能调优攻略
- Android 2016新技术
- Java对于静态的理解
- 限制程序中某类操作的执行次数的算法设计及C代码实现
- Android sdk自带的9patch工具(9妹)
- 保存博客
- 二叉树——C++实现
- Prime Land