Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SFML sprite.move()不工作_C++_Sfml - Fatal编程技术网

C++ SFML sprite.move()不工作

C++ SFML sprite.move()不工作,c++,sfml,C++,Sfml,我正在用SFML制作一个游戏,我正在尝试添加射击,但由于某些原因,sprite.move()似乎不起作用。以下是相关代码: 武器.cpp void Weapon::update(float delta, sf::RenderWindow& window, Player player) { for (auto s : shots) { s.move(delta); s.draw(window); } switch (type) {

我正在用SFML制作一个游戏,我正在尝试添加射击,但由于某些原因,sprite.move()似乎不起作用。以下是相关代码:

武器.cpp

void Weapon::update(float delta, sf::RenderWindow& window, Player player) {

    for (auto s : shots) {
        s.move(delta);
        s.draw(window);
    }

    switch (type) {
    case RANGED:

        if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
            shots.push_back(Shot(shot, player.position, Helper::getMousePos(window)));
            Helper::log(std::to_string(shots.size()));
        }

        break;
    case MELEE:

        break;
    }
}
Shot.cpp

Shot::Shot(sf::Sprite sprite_, sf::Vector2f origin, sf::Vector2f target)
{
    sprite = sprite_;
    sprite.setPosition(origin);
    direction = Helper::normalizeVector(target - origin);

    speed = 200;
}

void Shot::move(float delta) {
    sprite.move(direction * speed * delta);
}

void Shot::draw(sf::RenderWindow& window) {
    window.draw(sprite);
}

发生的情况是,射击在玩家的位置产生,但它们不会移动。更确切地说,它们会震动,好像它们试图移动,但有什么东西阻止了它们。如果需要更多代码,请告诉我。

问题很可能在循环中

for (auto s : shots) {
    s.move(delta);
    s.draw(window);
}
在这里,您通过值创建循环变量
s
,这意味着它是容器中元素的副本。修改副本当然不会修改原件

而是使用引用进行循环:


问题很可能在循环中

for (auto s : shots) {
    s.move(delta);
    s.draw(window);
}
在这里,您通过值创建循环变量
s
,这意味着它是容器中元素的副本。修改副本当然不会修改原件

而是使用引用进行循环: