我正在使用 C++ 和 OpenGL 构建一个两人(CPU 用户)扑克应用程序。目前,应用程序仅渲染图形,跟踪按下的按钮,在文本框中输入的值,如下所示。
while(true){
button.draw();
textbox.draw();
cards.draw();//draws cards based on the Mesh index, hard-coded atm
}
我已经单独编写了处理手牌排名、回合制比赛、底池结算等的游戏逻辑,但我不确定如何将其与渲染逻辑结合起来。
游戏逻辑应处于暂停状态,直到用户单击按钮或通过文本框输入值。每次分发给玩家的卡牌发生变化时,都应该在渲染端进行更新。当渲染端有动画时,游戏逻辑不应继续,直到动画结束。
游戏逻辑的渲染和处理之间应该如何进行这种通信?
我觉得我应该使用单独的线程进行逻辑和渲染,但我不确定如何处理资源共享。 逻辑线程应该如何等待事件发生? 我应该如何发送有关要为哪张卡片制作动画的数据?
典型的结构如下
while (active) {
processEvents();
updateScene();
renderScene();
swapBuffers();
}
processEvents
:
updateScene
:
renderScene
:
swapBuffers
:
多线程在这里会适得其反。每一步都基于上一步,如果上一步没有改变状态,那么输出将是相同的(使用帧缓冲区并渲染到纹理/渲染缓冲区,如果没有变化,则只需使用之前的渲染的场景 - 无需重新渲染)。