State *State1,*State2;已经初始化。
假设状态1结束后进入状态2。Update返回值-1表示结束程序,2表示跳转到状态2,0表示状态不变。
常用解决方案:
State *states[2]={State1,State2};
State *CurrentState = states[0]; //状态机模型。
while (TRUE){
if (PeekMessage...){ ProcessMessage...;}
CurrentState->Draw();
int ret = CurrentState->Update();
if (ret<0) {break;}
if (ret>0) {CurrentState = states[ret];}
}
现解决方案:
void PeekAllMessage(){
while (PeekMessage...){ ProcessMessage...;}
}
class State{
void Run(){
while (TRUE){
PeekAllMessage();
Draw();
int ret = Update();
if (ret<0) {exit(0);}
if (ret>0) {return;}
}
}
};
//in WinMain:
State1.Run();
State2.Run();
附注: 以上例程仅为做对比用。本模式可以用于更加过程化的结构,而无须使用C++特性。