这里是新手程序员,我正在使用带有 SFML 库、Code::Blocks 和 GNU GCC 编译器的 c++。视窗XP。
我正在制作一个简单的平台游戏,作为未来更大游戏的练习。我决定对其进行设置,以便它从文本文件中读取所有关卡数据。我刚刚在程序中添加了敌人(虽然现在它只是在屏幕上打印一个精灵)并且它第一次运行良好,但之后它在运行时崩溃。这是相关的代码位:
敌人.h:
class Enemy
{
...
}
typedef Enemy* EnemyPointer;
主要.h:
class App
{
private:
sf::Image EnemyImage;
EnemyPointer TheEnemies;
int LevelData[256][4];
public:
App();
int Execute();
bool Init();
void Cleanup();
}
主要.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 文件中读取的信息。它包含敌人的数量、它们的坐标和它们的类型。
我已经确定程序在 Init() 尝试使用在构造函数中创建的 Enemies 数组时崩溃了。我用评论标记了它。我查看了有关如何创建对象数组的论坛帖子,其中大多数人说这是如何做到的。我无法弄清楚它为什么会崩溃。如果有人知道如何解决这个问题,将不胜感激。谢谢。