实现渲染和游戏逻辑-Poker

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

我正在使用 C++ 和 OpenGL 构建一个两人(CPU 用户)扑克应用程序。目前,应用程序仅渲染图形,跟踪按下的按钮,在文本框中输入的值,如下所示。

while(true){
    button.draw();
    textbox.draw();
    cards.draw();//draws cards based on the Mesh index, hard-coded atm
}

我已经单独编写了处理手牌排名、回合制比赛、底池结算等的游戏逻辑,但我不确定如何将其与渲染逻辑结合起来。

游戏逻辑应处于暂停状态,直到用户单击按钮或通过文本框输入值。每次分发给玩家的卡牌发生变化时,都应该在渲染端进行更新。当渲染端有动画时,游戏逻辑不应继续,直到动画结束。

游戏逻辑的渲染和处理之间应该如何进行这种通信?

我觉得我应该使用单独的线程进行逻辑和渲染,但我不确定如何处理资源共享。 逻辑线程应该如何等待事件发生? 我应该如何发送有关要为哪张卡片制作动画的数据?

c++ opengl poker
1个回答
0
投票

典型的结构如下

while (active) {
    processEvents();
    updateScene();
    renderScene();
    swapBuffers();
}

processEvents

  • 从图形环境中轮询事件,例如按键、按钮或指针事件
  • 根据输入设置游戏逻辑状态

updateScene

  • 根据游戏逻辑状态,更新渲染引擎的状态
  • 这一步也可以在上面的步骤中完成

renderScene

  • 渲染场景

swapBuffers

  • 交换窗口缓冲区并呈现(新)渲染的场景

多线程在这里会适得其反。每一步都基于上一步,如果上一步没有改变状态,那么输出将是相同的(使用帧缓冲区并渲染到纹理/渲染缓冲区,如果没有变化,则只需使用之前的渲染的场景 - 无需重新渲染)。

© www.soinside.com 2019 - 2024. All rights reserved.