【发布时间】:2020-10-13 04:08:32
【问题描述】:
class Player {
public:
// something
double getVelPlayer();
private:
// something
sf::Sprite mPlayer;
};
class Game {
public:
// something
private:
void processEvents();
void update();
void render();
// something
};
void Game::update() {
sf::Vector2f movement(0.f, 0.f);
if(mIsMovingUp)
movement.y -= player.getVelPlayer() * timeElapsed.asMilliseconds();
if(mIsMovingDown)
movement.y += player.getVelPlayer() * timeElapsed.asMilliseconds();
if(mIsMovingLeft)
movement.x -= player.getVelPlayer() * timeElapsed.asMilliseconds();
if(mIsMovingRight)
movement.x += player.getVelPlayer() * timeElapsed.asMilliseconds();
player.mPlayer.move(movement);
}
void Game::render() {
mWindow.clear();
mWindow.draw(player.mPlayer);
mWindow.display();
}
int main() {
Player* player = new Player;
Game* game = new Game;
delete game;
delete player;
return 0;
}
我得到一个错误:'player' 没有在这个范围内声明
我需要从玩家对象中获取 mPlayer 对象到 Game::update 和 Game::update。
但如果我尝试编译,我总是会收到错误
如何声明 Player.getVelPlayer 或 draw(player.mPlayer)?
由于mPlayer是一个对象,所以我想我必须在一个对象中调用一个对象,但我不知道怎么做。
【问题讨论】:
-
这不是我从该代码中得到的错误,因此您的问题无法重现。我得到
error: ‘sf’ does not name a typesf::Sprite mPlayer;- 请发一个minimal reproducible example -
对不起,我正在使用 SFML。我忘了解释。
-
sfml 部分与问题无关,因此您应该能够移除这些部分以生成 minimal reproducible example。
-
我正在尝试使用内置在 Player 类中的 sf::Sprite 对象作为 Game 类。所以也许你可以创建一个空的 Sprite 类。
-
是的,好吧,创建minimal reproducible example 通常应该由提出问题的人来完成,这样试图提供帮助的人就可以复制代码并尝试编译它以重现提问者提出的问题。在这种情况下,我设法看到了问题,但无法重现相同的错误。