1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| class EventListener
{
public :
virtual ~EventListener() {}
virtual void OnEvent(sfEvent& Event) = 0
};
class Game
{
public :
void AddEventListener(EventListener* Listener)
{
myListeners.push_back(Listener);
}
private :
void GameLoop()
{
AddEventListener(&myPlayer);
bool IsRunning = true;
while (IsRunning)
{
sfEvent Event;
while (myWindow.GetEvent(Event))
{
if (Event.Type == sfEvent::Close)
IsRunning = false;
else
for (std::vector<EventListener*>::iterator i = myListeners.begin(); i != myListeners.end(); ++i)
(*i)->OnEvent(Event);
}
...
}
}
sfWindow myWindow;
Player myPlayer;
std::vector<EventListener*> myListeners;
};
class Player : public EventListener
{
private :
virtual void OnEvent(sfEvent& Event)
{
...
}
}; |
Partager