gpt4 book ai didi

architecture - 基本游戏架构问题

转载 作者:行者123 更新时间:2023-12-04 04:18:58 25 4
gpt4 key购买 nike

我正在构建一个简单的 2d 游戏,我想知道是否有比我更好的编码员可以提出一种设计其基本架构的好方法。

游戏非常简单。屏幕上有多种类型的单位可以射击、移动和执行命中检测。屏幕放大和缩小,屏幕一侧有一个菜单UI栏。

我现在的架构如下所示:

Load a "stage".
Load a UI.
Have the stage and UI pass references to each other.
Load a camera, feed it the "stage" as a parameter. Display on screen what the camera is told to "see"

Main Loop {
if (gameIsActive){
stage.update()
ui.update()
camera.updateAndRedraw()
}
}else{
if (!ui.pauseGame()){
gameIsActive=true
}

if(ui.pauseGame()){
gameIsActive=false
}


stage update(){
Go through a list of objects on stage, perform collision detection and "action" checks.
objects on stage are all subclasses of an object that has a reference to the stage, and use that reference to request objects be added to the stage (ie. bullets from guns).
}

ui update(){
updates bars, etc.

}

无论如何,这都是非常基本的。只是好奇是否有更好的方法来做到这一点。

谢谢,马修

最佳答案

构建主循环的方法就像天上的星星一样多!你的完全有效并且可能会正常工作。您可以尝试以下一些操作:

  • 您在哪里阅读控件?如果您在“ui.update”中执行此操作,然后在“stage.update”中做出响应,那么您将添加一个滞后帧。确保在循环中按照“读取控件 -> 应用控件 -> 更新游戏世界 -> 渲染”的顺序执行操作。

  • 您是否使用 3D API 进行渲染?很多书告诉你在渲染时做这样的事情(使用 OpenGL 伪代码):

    glClear()          // clear the buffer
    glBlahBlahDraw() // issue commands
    glSwapBuffers() // wait for commands to finish and display

    这样做更好

    glSwapBuffers()    // wait for commands from last time to finish
    glClear() // clear the buffer
    glBlahBlahDraw() // issue commands
    glFlush() // start the GPU working

    如果您这样做,GPU 可以在 CPU 更新下一帧的舞台的同时绘制屏幕。

  • 即使游戏“暂停”,某些游戏引擎也会继续渲染帧并接受某些 UI(例如相机控制)。这使您可以在暂停的游戏世界中飞行,并在尝试调试时查看屏幕外发生的情况。 (有时这称为“调试暂停”而不是“真正的暂停”。)

  • 此外,许多游戏引擎可以“单步”(运行一帧,然后立即暂停。)如果您试图捕获特定事件中发生的错误,这非常方便。

希望其中一些有帮助 - 这只是我在查看您的代码时的随机想法。

关于architecture - 基本游戏架构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com