【发布时间】:2017-12-11 10:47:49
【问题描述】:
我正在制作一个 SFML 游戏,我想暂时将屏幕上可以同时存在的子弹数量限制为 5 个。
这是所需的最少代码:
#define max_bullets_displayed 5
//...
Bullet* pociski[max_bullets_displayed];
//...
for (int i = 0; i < 5; i++)
{
pociski[i] = 0;
}
//...
//creating bullets when needed
if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
{
for (int i = 0; i < 5; i++)
{
if (pociski[i] == 0)
{
pociski[i] = new Bullet("pocisk.png", sf::Mouse::getPosition().x, sf::Mouse::getPosition().y, 23, 20);
}
}
}
//...
//displaying
for (int i = 0; i < 5; i++)
{
if (pociski[i] != 0) window.draw(pociski[i]->sprite);
}
我认为指针有问题。只能显示一个子弹,其余的即使点击后也不显示。没有抛出异常,内存正常。
【问题讨论】:
-
首先,你有内存泄漏。您需要删除使用
new创建的对象。除此之外,请澄清你到底有什么问题。出了什么问题,您有什么期望? -
我暂时不需要删除用 new 创建的对象,因为我将它们限制为最多 5 个,而且只要子弹击中某些东西,这些对象就会被删除。 @K.Kirsz
-
好的,你在同一个位置生成所有子弹,对吧?它们不只是相互重叠吗?
-
哦,谢谢,我才意识到。
标签: c++ pointers memory-management sfml