0

ここでは初心者プログラマーですが、SFML ライブラリー、Code::Blocks、および GNU GCC コンパイラーで c++ を使用しています。WindowsXP.

将来の大規模なゲームの練習として、単純なプラットフォーマーを作成しています。テキスト ファイルからすべてのレベル データを読み取るように設定することにしました。プログラムに敵を追加しただけで(現在は画面にスプライトを出力するだけですが)、最初は正常に機能しましたが、その後は実行時にクラッシュします。関連するコードは次のとおりです。

Enemy.h:

class Enemy
{
    ...
}

typedef Enemy* EnemyPointer;

Main.h:

class App
{
    private:
        sf::Image EnemyImage;

        EnemyPointer TheEnemies;

        int LevelData[256][4];

    public:
        App();

        int Execute();

        bool Init();

        void Cleanup();
}

Main.cpp:

App::App()
{
    TheEnemies = new Enemy[16]
}

int main()
{
    App TheApp;
    return TheApp.Execute();
}

int App::Execute()
{
    if(!Init()) return -1;

    LoadLevel();

    while(Running)
    {
        OnEvent(TheEvent);

        Loop();

        Render();

        Frame++;
    }

    Cleanup();

    return 0;
}

初期化.cpp:

bool App::Init()
{
    if(!EnemyImage.LoadFromFile("Enemy.bmp"))
    {
        std::cout<<"Failed to load \"Enemy.bmp\"";
        return false;
    }

    //Program crashes in this for loop.

    for(int c=0;c<=LevelData[0][1];c++)
    {
        TheEnemies[c].SetX(LevelData[LevelData[0][0]+1+c][0]);
        TheEnemies[c].SetY(LevelData[LevelData[0][0]+1+c][1]);
        TheEnemies[c].SetType(LevelData[LevelData[0][0]+1+c][2]);

        TheEnemies[c].Sprite.SetImage(EnemyImage);
    }
}

クリーンアップ.cpp:

void App::Cleanup()
{
    delete[] TheEnemies;
}

LevelData[][] は、.txt ファイルから読み取った情報を含む 2D 配列です。敵の数、座標、およびタイプが含まれています。

コンストラクターで作成された Enemies の配列を使用しようとすると、Init() 中にプログラムがクラッシュしたと判断しました。コメントでマークしました。オブジェクトの配列を作成する方法についてフォーラムの投稿を調べましたが、ほとんどの人はこれがその方法だと言っています。クラッシュする理由がわかりません。誰かがこれを修正する方法を知っていれば、それは大歓迎です。ありがとう。

4

0 に答える 0