【问题标题】:SFML Bullet not spawningSFML 子弹不生成
【发布时间】:2017-04-12 14:20:43
【问题描述】:

所以我正在使用 SFML 和 c++ 来创建一个简单的太空游戏。终其一生都无法产卵。这是我的来源...我只是想学习如何在游戏中生成新的精灵。

```

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include <string>

int main()
{
// Create the main window
sf::RenderWindow app(sf::VideoMode(800, 600), "SFML window");

// Load a sprite to display
sf::Texture texture_sprite;
if (!texture_sprite.loadFromFile("cb.bmp"))
    return EXIT_FAILURE;
sf::Sprite sprite(texture_sprite);

sf::Texture texture_background;
if (!texture_background.loadFromFile("space.png"))
    return EXIT_FAILURE;
sf::Sprite background(texture_background);

sf::Texture texture_fire;
if (!texture_background.loadFromFile("fire_1.png"))
    return EXIT_FAILURE;
sf::Sprite fire_sprite(texture_fire);
fire_sprite.setScale(4.0f, 1.6f);


std::string direction = "";
bool fire = false;

// Start the game loop
while (app.isOpen())
{
    // Process events
    sf::Event event;
    while (app.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
        {
            app.close();
        }
        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && sprite.getPosition().x > -20)
            {
            sprite.move(-10,0);
            std::cout << "X = " << sprite.getPosition().x << std::endl;
            std::cout << "Y = " << sprite.getPosition().y << std::endl;
            direction = "Left";
            }
        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && sprite.getPosition().x < 670 )
            {
            sprite.move(10,0);
            std::cout << "X = " << sprite.getPosition().x << std::endl;
            std::cout << "Y = " << sprite.getPosition().y << std::endl;
            direction = "Right";
            }
        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up) && sprite.getPosition().y > 0)
            {
            sprite.move(0,-10);
            std::cout << "X = " << sprite.getPosition().x << std::endl;
            std::cout << "Y = " << sprite.getPosition().y << std::endl;
            direction = "Up";
            }
        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down) && sprite.getPosition().y < 480 )
            {
            sprite.move(0,10);
            std::cout << "X = " << sprite.getPosition().x << std::endl;
            std::cout << "Y = " << sprite.getPosition().y << std::endl;
            direction = "Down";
            }
        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
            {
            fire = true;

            }
        else if (event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Space)
            {
            fire = false;
            }
            if(fire == true)
    {
        std::cout << "FIRE!!!" << std::endl;
        fire_sprite.setPosition((sprite.getPosition()));

        std::cout << "Fire positions is " <<fire_sprite.getPosition().x << " " << fire_sprite.getPosition().y << "The direction is " << direction <<std::endl;
    }

    }

    app.clear();

    // Draw the sprite

    app.draw(background);
    app.draw(sprite);
    app.draw(fire_sprite);
    // Update the window
    app.display();


}

return EXIT_SUCCESS;
}

```

【问题讨论】:

  • 最好获取更多详细信息,否则很难为您提供帮助。

标签: c++ sprite sfml spawn


【解决方案1】:
sf::Texture texture_fire;
if (!texture_background.loadFromFile("fire_1.png"))

不是将纹理加载到texture_fire,而是再次加载到texture_background。应该是:

if (!texture_fire.loadFromFile("fire_1.png"))

【讨论】:

  • 这就是整个代码编译并运行它,你会明白我的意思
  • 我确实运行了您的代码,并且通过这个小修正它工作得很好。 pastebin.com/6LMtdXYZ
  • Jeno 谢谢,我刚到家,我马上试试看
猜你喜欢
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
相关资源
最近更新 更多