Yeah, many of the annoyances should be addressed in the next chapter, whenever that is.
The other thing I've noticed is that any time I try to make changes to the game class I end up with more errors than I'd like.
There should be no real issues in changing the game code, so next time this happens, post the error that occurs and the code you added/changed.
As to disappearing sprites, they aren't actually disappearing, they are moving... very very very far. The game no longer updates when showing the Menu, but SFML does, and this is where the "bug" is coming from. Essentially each frame we are getting the elapsed time since the last frame which we then use to normalize movement the next frame. The code assumes this number is always going to be a tiny fraction of a second, but this isn't true if we do something between drawing frames ( like hitting a break point or showing the menu ).
Any easy crude work around is to discard any deltas over a certain threshold.
So, in GameObjectManager, locate:
void GameObjectManager::UpdateAll()
{
std::map<std::string,VisibleGameObject*>::const_iterator itr = _gameObjects.begin();
float timeDelta = Game::GetWindow().GetFrameTime();
...
Add the line:
if(timeDelta > 0.1f) timeDelta = 0.0f;
Which basically says if more than 1/10th a second occurred between updates, 0 out the timeDelta, which will effectively cause no movement this update. If there is a way to "reset" GetFrameTime() or to pause it in general, that would be a cleaner solution.
That will fix the disappearing sprite issues.