我正在為基于文本的游戲中的角色設計一個動態傷害盒,它可以捕捉向他們揮舞的武器命中(或未命中)的位置。然后將命中的位置(指數)和損壞(量級)轉化為角色相應肢體健康變數的減少。我的想法是,最好使用帶有一些 3D 向量/陣列成員的類來實作這個傷痛箱。
自然,我可能希望針對不同大小的敵人使用不同尺寸的 3D 容器,但我知道大小通常是在初始化時確定的。所以這是我的問題:
使用 C 風格的動態陣列是否會更有效,我可以在引數化建構式中決定和分配它的大小,就像這樣?
class hurtBox {
private:
int ***hurtBoxMatrix;
public:
hurtBox(int l, int w, int h) {
hurtBoxMatrix = new int**[l];
for (int i = 0; i < l; i ) {
hurtBoxMatrix[i] = new int*[w];
for (int j = 0; j < w; j ) {
hurtBoxMatrix[i][j] = new int[h] ();
}
}
}
};
或者,我將元素推入到我想要的尺寸的向量就足夠了嗎?
class hurtBox {
private:
vector<vector<vector<int>>> hurtBoxMatrix;
public:
hurtBox(int l, int w, int h) {
for (int i = 0; i < l; i ) {
hurtBoxMatrix.push_back(vector<vector<int>>);
for (int j = 0; j < w; j ) {
hurtBoxMatrix[i].push_back(vector<int>);
for (int k = 0; k < h; k ) {
hurtBoxMatrix[i][j].push_back(0);
}
}
}
}
};
我想象前者,因為第一次分配是恒定時間,對吧?有沒有比這兩種方法都更好的方法?
提前致謝。
uj5u.com熱心網友回復:
您最好在單個分配中簡單地分配 3D 陣列,并使用索引來訪問元素。然后可以在 std::vector 的建構式中處理 std::vector 存盤的分配。
一般來說,最好避免:
- 多次分配
- 反復呼叫 push_back
class hurtBox {
private:
vector<int> hurtBoxMatrix;
int m_l;
int m_w;
int m_h;
public:
hurtBox(int l, int w, int h)
: hurtBoxMatrix(l * w * h), m_l(l), m_w(w), m_h(h) {}
int& operator (int i, int j, int k) {
return hurtBoxMatrix[ I*m_w*m_h j*m_w k ];
}
const int operator (int i, int j, int k) const {
return hurtBoxMatrix[ i*m_w*m_h j*m_w k ];
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/380849.html
