图片不显示,关闭时出错 --> 调试断言失败!表达式:is_block_type_valid(标头>_block_use)



图片未显示,当我关闭时,出现错误。我想不通,可能是指针的问题。

stackoverflow正在询问细节,但我没有更多细节 - 对不起。 stackoverflow正在询问细节,但我没有更多细节 - 对不起。 stackoverflow正在询问细节,但我没有更多细节 - 对不起。 stackoverflow正在询问细节,但我没有更多细节 - 对不起。 stackoverflow正在询问细节,但我没有更多细节 - 对不起。

菜单.h

#include "Picture.h"
class menu
{
const int menuPictCount;
picture* menuPicture[];
public:
menu(sf::RenderWindow& usableArea);
~menu();
void draw();
void posСorrection();
void shineButton(sf::Color color);
};

菜单.cpp <---------问题就在这里


menu::menu(sf::RenderWindow& usableArea) : menuPictCount(4)
{
this->menuPicture[this->menuPictCount];
//background
this->menuPicture[0] = new picture(usableArea, "image/background/0.png");
//buttons
this->menuPicture[1] = new picture(usableArea, "image/menu/newgame.png");
this->menuPicture[1] = new picture(usableArea, "image/menu/continue.png");
this->menuPicture[3] = new picture(usableArea, "image/menu/exit.png");
}
menu::~menu()
{
for (size_t i = 0; i < this->menuPictCount; i++) delete this->menuPicture[i];
delete[] menuPicture;
}
void menu::draw()
{
for (size_t i = 0; i < this->menuPictCount; i++) this->menuPicture[i]->draw();
}
void menu::posСorrection()
{
const int buttonsCount = this->menuPictCount - 1;
if (buttonsCount % 2 == 0)
{
int indexCenterOver = buttonsCount / 2;
int indexCenterUnder = indexCenterOver + 1;
this->menuPicture[indexCenterOver]->putCenterOver();
this->menuPicture[indexCenterUnder]->putCenterUnder();
for (size_t i = indexCenterOver - 1; i > 0; i--)
{
this->menuPicture[i]->putOverObj(*this->menuPicture[i + 1]);
}
for (size_t i = indexCenterUnder + 1; i <= buttonsCount; i++)
{
this->menuPicture[i]->putUnderObj(*this->menuPicture[i - 1]);
}
}
else
{
const int indexCenter = buttonsCount / 2 + 1;
this->menuPicture[indexCenter]->putCenter();
for (size_t i = indexCenter - 1; i > 0; i--)
{
this->menuPicture[i]->putOverObj(*this->menuPicture[i + 1]);
}
for (size_t i = indexCenter + 1; i <= buttonsCount; i++)
{
this->menuPicture[i]->putUnderObj(*this->menuPicture[i - 1]);
}
}
}
void menu::shineButton(sf::Color color)
{
/*for (size_t i = 0; i <= this->buttons.GetCount(); i++)
{
if (this->buttons.GetElement(i)->data.trackContainsCursor())
if (this->buttons.GetElement(i)->data.getColor() != color)
{
this->buttons.GetElement(i)->data.setColor(color);
}
if (!this->buttons.GetElement(i)->data.trackContainsCursor())
if (this->buttons.GetElement(i)->data.getColor() == color)
{
this->buttons.GetElement(i)->data.setColor(color);
}
}*/
} ```

[1]: https://i.stack.imgur.com/uNY8B.png

而不是

picture* menuPicture[];

std::vector<std::unique_ptr<picture>> menuPicture;

menu构造函数中,而不是这样做:

this->menuPicture[this->menuPictCount];

这样做:

this->menuPicture.resize(this->menuPictCount);

编辑: 当然,也从析构函数中删除deletestd::vectorstd::unique_ptr会自己清理。

如果菜单中的图片数量恒定(如在构造函数中(,则可以menuPicture声明更改为:

std::array<std::unique_ptr<picture>, 4> menuPicture;

但是你不能在它上面调用调整大小。

最新更新