是否不希望将指针存储在具有不同访问方法的多个容器中?
Is it undesirable to store pointers in multiple containers with different access methods?
我目前正在制作一个节点图来存储我正在制作的一款2D游戏的贴图/对象数据。本质上它是一个六边形贴图,每个贴图上都有对象。
我当前的设置基本上是这样的:
class HexCell {
public:
HexCell* GetNeighbor(int dir) { return neighbors[dir]; };
private:
HexCell* neighbors[6];
// (x, y) position
// Contents of cell
};
class HexGraph {
public:
HexCell* GetCellByIndex(int index) { return cells[index]; };
vector<HexCell*> GetCellsByGridIndex(int x, int y) { return grid[x][y]; };
private:
vector<HexCell*> cells;
vector< vector< vector <HexCell*> > > grid;
};
目前有三种方法访问hexcel:
- 通过
cells[]
的随机访问(用于迭代整个列表) - 查找具有
grid[x][y]
的单元格子集(用于渲染) - 图节点的单元级遍历(对游戏逻辑有用)
我的问题是:是一个可怕的内存浪费存储8个指针为每个对象(一个在cells
一个在grid
和多达六个作为其他单元的邻居)?
是否有更好/更常见的方法来做到这一点,或者它是一个可接受的系统,以便为不同的用途提供不同的访问方法?
给定十六进制地图只是一个具有直列和波浪行的2D网格,我建议将您的地图数据存储为一个2D数组的hexcell。您将能够根据X索引确定十六进制单元格列是偶数还是奇数,以确定它是否是一个向下移位的十六进制单元格
这是一个十六进制单元格及其对应的x,y索引在10x4数组中的粗略表示,其中x %2==1是向下移动1/2十六进制单元格高度的列
0,0 2,0 4,0 6,0 8,0
1,0 3,0 5,0 7,0 9,0
0,1 2,1 4,1 6,1 8,1
1,1 3,1 5,1 7,1 9,1
0,2 2,2 4,2 6,2 8,2
1,2 3,2 5,2 7,2 9,2
0,3 2,3 4,3 6,3 8,3
1,3 3,3 5,3 7,3 9,3
使用此方法,您可以编写逻辑来确定X,Y的6个邻居非常简单,而无需在每个十六进制单元格中存储额外的信息
相关文章:
- 通过方法访问结构
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 类变量无法从类方法访问
- 为什么从静态方法访问非静态方法是糟糕的设计
- 子类是否也在 c++ 中继承私有数据成员?但通过超类的公共方法访问
- 如何从回调方法访问自定义类成员
- 使初始化变量可供多个属性初始化方法访问
- 从c++中的方法访问指向对象的专用指针数组
- C++如何通过回调方法访问成员变量
- "undefined reference"从静态方法访问的模板类的静态成员
- 如何从方法访问类成员
- 类静态方法访问其静态数据成员
- 从静态方法访问非静态成员的工作示例
- 类方法访问其数据成员
- 通过公共方法访问私有成员变量
- 为什么无法从模板方法访问此类自己的受保护成员?
- 通过非静态方法访问静态成员
- JNI保留对对象的全局引用,并使用其他JNI方法访问它.在多个JNI调用中保持C++对象的活动状态
- 如何让一个方法访问其他模板类实例的私有成员
- 方法访问C++中的对象实例化