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