SFML sprite.move() not working
SFML sprite.move() not working
我正在用SFML制作一款游戏,我试图添加射击,但由于某种原因sprite.move()似乎不起作用。以下是相关代码:
Weapon.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
,这意味着它是容器中元素的副本。修改副本当然不会修改原件。
使用引用代替循环:
// Notice the ampersand here
// |
// v
for (auto& s : shots) {
s.move(delta);
s.draw(window);
}
相关文章:
- GDB - strcmp not working: __strcmp_sse2_unaligned
- QT qScriptConnect is not working
- QDesktopServices::openUrl() not working Qt
- C++ std::set ordering not working with customer class*
- C++ SetWindowText not working
- visual studio 2012 c++ hello world - iostream not working
- getGravity not working?
- Opencv findcontours CV_RETR_EXTERNAL not working
- c++ srand() not working
- std::queue::empty() not working?
- BCB swprintf not working
- 将类型作为指向另一个类的对象的指针的泛型类-NOT WORKING
- LoadLibrary is not working
- gluUnProject not working
- C++ catch bad_alloc not working
- updatelayeredwindow not working
- OpenMP set_num_threads() is not working
- glOrtho not working
- Cuda atomicInc not working
- WinAPI DestroyWindow not working