【发布时间】:2014-07-15 14:41:24
【问题描述】:
我正在使用 SFML 作为学习练习制作 Arkanoid 克隆。对于 PowerUp 类,我有一个这样的更新方法:
void PowerUp::update(FrameTime mFT) {
if (!(bottom() >= windowHeight))
shape.move(velocity * mFT);
else
onGround = true;
}
在我的 PowerUpManager 类中,我有一个 PowerUp 向量,这个函数可以一次更新所有 PowerUp:
void PowerUpManager::update(FrameTime mFT) {
for (auto powerUp : mPowerUps)
powerUp.update(mFT);
}
但是,这似乎不起作用。如果我运行此代码,则通电在生成后会保持静止,并且不会向下移动,就像它们应该的那样。但是,如果我更换
for (auto powerUp : mPowerUps)
powerUp.update(mFT);
与更传统但老式的
for (int i{ 0 }; i < mPowerUps.size(); ++i)
mPowerUps[i].update(mFT);
,一切正常。这告诉我,这 2 位代码的含义有所不同。据我所知,前者只是后者的新 C++ 语法糖版本。有什么我想念的吗?
更奇怪的是我的draw all功能,
void PowerUpManager::draw(sf::RenderWindow& window) {
for (auto powerUp : mPowerUps)
powerUp.draw(window);
}
,工作正常,没有问题。
【问题讨论】:
标签: c++ c++11 for-loop foreach