c++ - 应用程序崩溃并同时运行
问题描述
我画了应用程序菜单,之前写过菜单类和这个类的功能。
当我启动应用程序时,菜单工作 5-7 秒,但在 Windows 中,光标以蓝色圆圈的形式旋转,这不是好兆头。如果这 5-7 秒是空闲的,整个屏幕变白,Windows 说应用程序没有响应。在这种情况下,如果您按下按钮损坏的位置,这些按钮就会被触发,菜单关闭并开始游戏。我认为问题在于菜单类的描述。
菜单类代码:
class Menu
{
public:
Image menuImage1, menuImage2, menuImage3;
Texture menuTexture1, menuTexture2, menuTexture3;
int menuNum = 0;
bool isMenu;
list <Asteroid*> asteroidsMass;
list <Asteroid*> ::iterator it;
Sprite menu1, menu2, menu3;
Menu()
{
menuImage1.createMaskFromColor(Color::Black);
menuImage2.createMaskFromColor(Color::Black);
menuImage3.createMaskFromColor(Color::Black);
menuImage1.loadFromFile("title.jpg");
menuImage2.loadFromFile("start.jpg");
menuImage3.loadFromFile("exit.jpg");
menuTexture1.loadFromImage(menuImage1);
menuTexture2.loadFromImage(menuImage2);
menuTexture3.loadFromImage(menuImage3);
menu1.setTexture(menuTexture1);
menu2.setTexture(menuTexture2);
menu3.setTexture(menuTexture3);
menu1.setPosition(scrX / 2, 200);
menu2.setPosition((scrX / 2) - 172.5, 300);
menu3.setPosition((scrX / 2) - 140, 450);
menu1.setOrigin(300, 75);
for (int i = 0; i < 15; i++)
{
Asteroid* aster = new Asteroid(rand() % 1200, rand() % 800, 5, 25, 0);
asteroidsMass.push_back(aster);
}
isMenu = true;
}
void update(RenderWindow& app)
{
while (isMenu)
{
menu2.setColor(Color::White);
menu3.setColor(Color::White);
app.clear(Color::Black);
menuNum = 0;
if (IntRect((scrX / 2) - 172, 300, 360, 100).contains(Mouse::getPosition(app))) { menu2.setColor(Color::Green); menuNum = 2; }
else if (IntRect((scrX / 2) - 172, 450, 360, 100).contains(Mouse::getPosition(app))) { menu3.setColor(Color::Green);menuNum = 3; }
if (Mouse::isButtonPressed(Mouse::Left))
{
if (menuNum == 2)
{
for (it = asteroidsMass.begin(); it != asteroidsMass.end(); it++)
{
Asteroid* asteroid = *it;
it = asteroidsMass.erase(it);
delete asteroid;
}
isMenu = false;
}
if (menuNum == 3)
{
for (it = asteroidsMass.begin(); it != asteroidsMass.end(); it++)
{
Asteroid* asteroid = *it;
it = asteroidsMass.erase(it);
delete asteroid;
}
isMenu = false;
app.close();
}
}
for (it = asteroidsMass.begin(); it != asteroidsMass.end(); it++)
{
app.draw((*it)->EntityShape);
}
for (it = asteroidsMass.begin(); it != asteroidsMass.end(); it++)
{
(*it)->update();
}
app.draw(menu1);
app.draw(menu2);
app.draw(menu3);
app.display();
}
}
};
解决方案
我解决了我的问题!如果您有同样的问题,只需在关闭窗口的“while”循环检查中写入:
while(isMenu)
{
Event event;
while (app.pollEvent(event))
{
if (event.type == Event::Closed)
app.close();
}
//some code
}
推荐阅读
- node.js - 为什么我的 GraphQL 订阅在本地服务器上运行,但在实时服务器上部署时却不行
- python - Python正则表达式,否定字符串之间的一组字符
- javascript - 如何在 jquery .html() 方法中设置数组或倍数 var?
- html - 我希望引导程序在一个扩展另一个将关闭时崩溃
- mongodb - MongoExpress 没有从 .env 文件中读取登录名/密码
- python - 链接响应是 401,但它在前一段时间工作,然后工作 python
- javascript - Firebase 模拟器对本地 FireStore 的请求不成功
- reactjs - 什么是防止浏览器缓存文件反应的最佳解决方案
- git - 如何为 git pull 合并消息提供评论
- terraform - 用于检索键值的 Terraform 过滤器