我正在尝试在 SDL2 中创建一个基于时间的事件,其中 5 秒后,加载不同的屏幕。但我没能做到这一点。我尝试过SDL_Delay,SDL_AddTimer,但没有成功。现在我已经尝试了这段代码,但也没有成功。 5秒时间到后,代码 在函数 fEvent1() 中不起作用,并且它不会更改屏幕。但我觉得奇怪的是,时间到了后,如果我移动鼠标,它确实会改变屏幕!
这是代码:
Crono::Crono() {}
void Crono::starting() {
SDL_GetTicks();
}
Uint32 Crono::cronom(){
Uint32 uin = SDL_GetTicks();
return uin;
}
void (*fptrEvent)();//pointer to event functions.
void (*fptrRender)();//pointer to render functions
Crono cro1;
bool boo2;
SDL_Event eve;
void fEvent1() {
cro1.starting();
if (boo2 == true) {
fptrEvent = &fEvent2;//cant make this work
}
}
void fRender1() {
//some rendering
if ((cro1.cronom()) > 5000) {
boo2 = true;
}
}
void fEvent2() {
fptrRender = &fRender2;
//some event
}
void fRender2() {
//some rendering
}
int main(int argc, char* args[]) {
Window wind(1280, 720);
fptrEvent = &fEvent1;
fptrRender = &fRender1;
while (!end) {
while (SDL_PollEvent(&eve) != 0) {
fptrEvent();
}
wind.RenderDrawColor();
wind.RenderClear();
fptrRender();
wind.RenderPresent();
}
return 0;
}
我已经找到解决办法了。就像在渲染函数本身中更改屏幕一样简单。我也省去了布尔。
void fEvent1() {
cro1.starting();
if ((cro1.cronom()) > 5000) {
fptrEvent = &fEvent2;
}
}
void fRender1() {
//some rendering
if ((cro1.cronom()) > 5000) {
fptrRender = &fRende2;//now it works
}
}