如何制作 SDL 基于时间的事件

问题描述 投票:0回答:1

我正在尝试在 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;
}
c++ sdl sdl-2
1个回答
0
投票

我已经找到解决办法了。就像在渲染函数本身中更改屏幕一样简单。我也省去了布尔。

void fEvent1() {
   cro1.starting();
   if ((cro1.cronom()) > 5000) {
      fptrEvent = &fEvent2;
   }
}

void fRender1() {
   //some rendering
   if ((cro1.cronom()) > 5000) {
      fptrRender = &fRende2;//now it works
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.