【问题标题】:Sprites not displaying how I want them to display精灵没有显示我希望它们如何显示
【发布时间】: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


【解决方案1】:

所有的子弹都在同一个位置生成,因此它们被绘制在彼此的顶部。

pociski[i] = new Bullet("pocisk.png", sf::Mouse::getPosition().x, sf::Mouse::getPosition().y, 23, 20);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多