gpt4 book ai didi

c++ - SFML sprite.move() 不工作

转载 作者:太空宇宙 更新时间:2023-11-04 16:08:07 26 4
gpt4 key购买 nike

我正在用 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;
}
}

镜头.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 按值,这意味着它是容器中元素的拷贝。修改拷贝当然不会修改原件。

使用引用代替循环:

// Notice the ampersand here
// |
// v
for (auto& s : shots) {
s.move(delta);
s.draw(window);
}

关于c++ - SFML sprite.move() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31965554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com