【问题标题】:SFML draw many spritesSFML 绘制许多精灵
【发布时间】:2020-01-17 10:19:23
【问题描述】:

所以我需要绘制一个精灵 5 次,将另一个精灵向前移动一些像素,这样它们就不会堆叠。我的 for 循环不起作用,现在我不知道该怎么做。我还创建了一个英雄类,因为我只需要绘制一次它的精灵。当我运行程序时,它只显示 1 个塔。

int main() {
    sf::RenderWindow screen(sf::VideoMode(700, 580), "SFML Demo");
    sf::Event event;
    int posX = 0, posY = 0;
    Image TileSet;
    TileSet.loadFromFile("Town.png");
    Hero My_Hero("Orc.png");
    Texture TowerTexture;
    TowerTexture.loadFromImage(TileSet);
    Sprite Tower;
    Tower.setTexture(TowerTexture);
    Tower.setPosition(0, 0);
    Tower.setTextureRect(IntRect(383, 96, 145, 280));


    while (screen.isOpen()) {
        while (screen.pollEvent(event)) {
            if (event.type == sf::Event::EventType::Closed)
                screen.close();
        }

        screen.clear();
        for (int i = 0; i < 4; ++i) {
            screen.draw(Tower);
            posX += 40;
            Tower.setPosition(posX, posY);
        }
        My_Hero.MoveHero();
        screen.draw(My_Hero.getSprite());
        screen.display();
    }
}

【问题讨论】:

  • 如果您能解释一下究竟是什么不起作用以及您怎么知道它不起作用,那就太好了。
  • 改了,抱歉

标签: c++ sfml


【解决方案1】:

您的问题来自posX。 您应该每帧将 posX 设置为零。

类似:

posX = 0;
for (int i = 0; i < 4; ++i) {
    screen.draw(Tower);
    posX += 40;
    Tower.setPosition(posX, posY);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2019-11-08
    • 2013-05-31
    • 2017-05-19
    • 2012-05-09
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多