前面已经具备设计一个2D游戏和UI元素的所有的基础设备。
下面将丰富它的内容。hold on.首先要有一个管理大量资源的类,以后可以利用它来分拣、增加、删除、计数其中的元素。C++提供了一些基础的类型如vector之类的而且在说明中称这是由很聪明的人设计的算法,不需要改进,聪明人设计那么愚蠢的命名方式和用法!我fuck 死它!C#中有个最常用的类List虽然和c++比起来剧慢但勉强可以应付以上的要求,我现在就来设计个简单的能满足目前需要的c++->List:新建个"List.h"的文件:
template<typename TYPE>
struct List
{
List(){ Count =0; obj=0;}
TYPE &operator [] (const int index) const { return obj[index]; }//提取元素if (index>Count)那就找块豆腐撞死吧
int Add(const TYPE object)//添加
{
if(Count>0)
{
TYPE* newobj=new TYPE[Count+1];//由于大小未知所以不能memcpy
for(int i=0;i<Count;i++) newobj[i]=obj[i];
newobj[Count]=object;
obj=newobj;
}
else{ obj=new TYPE[1];obj[0]=object; }
return Count++;
}
void Remove(const int index)//删除
{
obj[index]=obj[Count-1];
Count--;
}
void Clear(){ delete obj; Count = 0;}
int Count;//计数
TYPE* obj;
};
我的list所有的命名方式和用法与C#的LIst完全相同。
后面游戏中会大量使用它包括在每祯之间不停的更新列表。
C++的优势在与通过使用指针来直接访问内存地址来达到高性能而危险性也极高,可以用来烧毁硬件。很多人沉迷与设计个自己以为很聪明的数学循环而放弃内存地址的直接利用这才是弱智的表现,巧妙利用memset memcpy 可以完成各种列表的复制转移同时还可以给分类复杂的变量赋值,但也有局限就是你必须确定转移对象的字节大小。我的List 暂时回避了这个问题。
以下是UI的示例