私は2dゲームを構築していて、すべての敵オブジェクトを配列に格納しています。今私はquadtreeを実装しようとしています。現在、私はquadtreeを構築しようとしているだけで、衝突には関係しません。四分木にアイテムをプッシュするコードは以下の通りです:アドレスの別のデータ構造にベクトルの要素を渡す
for (std::vector<Enemy>::iterator i=m_enemies.begin(); i != m_enemies.end(); ++i) {
std::cout << &(*i) << "Address of the object" << std::endl;
m_quad.Insert(&(*i));
}
挿入のためのコードは以下の通りです:
void Quad::Insert(sf::RectangleShape* l_gameObject){
std::cout << &l_gameObject << "dsa1" << std::endl;
std::cout << "called insert " << m_objects.size() << std::endl;
m_objects.push_back(l_gameObject);
if (m_level < m_maxLevel) {
if (m_objects.size() > 3) {
std::cout<< "creating subregions " << m_objects.size() << std::endl;
m_subRegions.push_back(Quad(m_x,m_y,m_width/2.f, m_height/2, m_level + 1, m_maxLevel-1));
m_subRegions.push_back(Quad(m_x+m_width/2.f,m_y,m_width/2.f,m_height/2.f, m_level + 1, m_maxLevel-1));
m_subRegions.push_back(Quad(m_x+m_width/2.f, m_y + m_height/2.f, m_width/2.f, m_height/2.f, m_level + 1, m_maxLevel-1));
m_subRegions.push_back(Quad(m_x, m_y + m_height/2.f, m_width/2.f, m_height/2.f, m_level + 1, m_maxLevel-1));
std::vector<int> temp;
for (int i=0; i < m_objects.size(); i++){
for (int j=0; j< m_subRegions.size(); j++) {
if (m_subRegions[j].Contains(m_objects[i])) {
m_subRegions[j].Insert(m_objects[i]);
temp.push_back(i);
break;
}
}
}
for (int i = temp.size(); i > -1; i--){
m_objects.erase(m_objects.begin() + temp[i]);
}
}
}
}
私はへの挿入機能を渡していたアドレスを印刷します私が持っているのはでの機能が違うと分かります。実際にはのは常に同じで、私が渡すものは常に異なるはずです。なぜ誰がその事件を明らかにすることができますか?
EDIT:パラメータのアドレスを印刷していたことを指摘してくれたgsamarasに感謝します。
フォロー質問
私はループのために最初に取り組むのですオブジェクトのメソッドを使用する場合、私は正しい結果を得るが、私は挿入機能で同じことを行うとき、私は0なぜを取得しますそれは?
うん、そうだった。私は住所の住所を印刷していました。あなたは私が持っている2番目の問題の編集を確認できますか? – SuburbanFilth
私は前にコメントしたものよりも明確なコードで回答を投稿しました。(これがコメントを削除した理由です)、これがあなたの質問に答えます。私はフォローアップの質問であなたが何を意味するか分からない。一般的に、投稿された質問は1つだけ質問する必要があります。 – gsamaras
これはあなたのケースでは問題ではないかもしれませんが、 'std :: vector'要素のアドレスが挿入(またはプッシュバック)新しい要素(内部バッファの再割り当てが発生する可能性があるため) – Scheff