メイン クラスで使用されている配列に別のクラスからアクセスしようとすると問題が発生します。私のアプリケーションは、2D プラットフォーム ゲームを作成するためのエディターです。基本的に、2D アセット (セグメント) を配置してレベルを構築することができます。
私のメイン クラスは、マップ セグメント クラスの配列を処理し (配列内の各セグメント クラスは、マップ上のセグメントの位置、縮尺、回転などの情報を保持します)、それらを画面に描画します。
メインクラスで初期化され、ファイルから利用可能なセグメントのグリッドを描画するために使用される、基本的にパネル(ドラッグ可能で、Photoshop などで見られるようにサイズ変更可能)である別のクラスがあります。私が必要としているのは、セグメントの 1 つをクリックして、メイン クラスで参照される配列に情報を追加する機能です。
配列を宣言するメインクラス「Map」があります。
map.h (簡略化)
class Map
{
public:
MapSegment* mapSeg[512];
};
次に、パネルを作成して使用可能なセグメントを表示するときに、その配列の参照を送信しようとしています。
Panel* segmentPane = new SegmentPanel(sf::Rect<float>(200,200,250,200), mapSeg);
セグメント パネル ヘッダーは次のように形成されます。
class SegmentPanel : public Panel
{
public:
SegmentPanel(sf::Rect<float> _position, MapSegment* mapSeg[512];);
void Update();
void Draw(sf::RenderWindow & renderWindow);
void ReadSegments();
private:
std::vector<SegmentDefinition *> segDef;
MapSegment* mapSeg[512];
};
そしてSegmentPanel cpp:
SegmentPanel::SegmentPanel(sf::Rect<float> _position, MapSegment* mapSeg[512])
: Panel(_position)
{
panelTitle = "Segment Selection";
}
void SegmentPanel::Update()
{
// Update segments
}
void SegmentPanel::Draw(sf::RenderWindow & renderWindow)
{
// Draw default panel items
Panel::Draw(renderWindow);
// Draw segments
}
ただし、SegmentPanel.cpp クラスから配列に要素を追加しても、メインの Main クラスに反映されていないようです。メモリ内に新しい配列が作成されているようです。
C# で作業した後、私はまだ C++ にかなり慣れていません。