小编Sti*_*CPP的帖子

构建基于状态的游戏引擎,Makefile结构有帮助吗?

我正在研究一个基于状态的游戏引擎,并且有一些我很满意的开始.

有一个抽象类GameState.hpp,我使用的是虚拟方法(init,run,pause等...).

GameEngine.cpp/hpp是一个包含一堆GameState对象的类,它通过运行当前状态的相关方法来设置游戏循环.

我的测试游戏TestGame.cpp创建了一个GameEngine对象并推送了一个TestState实例并运行等等...所有工作正如我所料.

我想构建我的源代码树而不是编译来自同一目录的所有内容,并考虑以下内容,因为每个游戏会有多个状态:

src/
  +Engine/
    +GameEngine.cpp
    +GameEngine.hpp
    +GameState.hpp
  +TestGame/
    +States/
      +TestState.cpp
      +TestState.hpp
    +TestGame.cpp
Run Code Online (Sandbox Code Playgroud)

在构建时,我不确定我是否理解需要编译什么,以及编译对象应该去哪里.

到目前为止,我最初的想法是:

  1. 使用GameState.hpp编译GameEngine.cpp/hpp,给出GameEngine.o

  2. 编译每个游戏状态,例如.TestState.hpp中的TestState.cpp/hpp给出了TestState.o

  3. 使用GameEngine.o/hpp,GameState.hpp,TestState.o/hpp(以及任何其他状态)编译TestGame.cpp/hpp,给出TestGame.bin

我是在正确的轨道上吗?GameEngine应该构建一个lib,还是一个普通的.o好吗?我是否需要在每个编译中包含标题仍然有点模糊.此外,每个编译的输出文件是否与源位于同一目录中,还是应该位于结构化bin /目录中?

我会玩游戏并发布一些Makefile尝试和输出.让我知道如果我应该发布代码,总共可能有200行.没有实际的图形实现等......目前只是一个框架.

谢谢你们,任何帮助都非常感谢!

编辑:感谢您的快速回复.我已阅读下面的评论,并希望提供更新并清除一些内容.

首先,我正在研究autotools,但这主要是一个学习项目,其中一部分是grokking makefile.我也来自Java背景,所以我真的想要了解我正在构建的内容以及我的项目如何组合在一起.如上所述,我甚至不知道某些东西应该是库还是只是在编译时指向.

我的目标概述:我认为引擎几乎是一个子项目.即使它的简单(<10个文件),它将加载我认为的'状态'并循环状态定义的[ 句柄事件,更新,显示 ]方法.我有一个算法,旨在每秒进行一定数量的更新,同时根据需要改变帧速率.

例如状态显示方法将利用引擎的SDL支持的显示功能(可能是一个tile引擎,状态可以说'加载这些资源,显示这些tile',或者一个widget库,无论......)来呈现代表游戏世界模型.在处理事件的方法,可以用一个抽象的键盘接口.我希望能够在引擎中添加这样的功能. Update将管理代表游戏世界的模型.它将跟踪世界中的物体(场景,玩家和np),根据物理和碰撞检测应用运动等...

我想我希望能够构建这个并且只是将对象(和标题?)包含在我正在处理的游戏中.无论是'将引擎源dir复制到游戏项目的根目录并将其添加到主Makefile中,一起构建它',或者"只要它发生变化就在引擎上运行make",用副本构建游戏项目最新的引擎对象(,共享对象,其他什么?)和标题',对于我使用一个引擎处理多个小游戏项目最简单的方法是什么?我有点想让自己站起来,所以我可以随意玩游戏,因为我有它们,比如2周的编码等等...

状态表示任何不同的视图和一组交互.引擎具有LIFO状态堆栈,因此简单的游戏可以在堆栈上具有以下状态:DrivingMode - PauseMenu - 设置实际游戏具有GameEngine的实例,并且将添加DrivingMode以启动游戏.用户暂停,暂停DrivingMode状态并按下PauseMenu状态(在push时运行其init,run等等).在这里,用户选择暂停PauseMenu状态并加载设置的设置......当它们退出时,弹出状态(清理等等......首先运行),并恢复最高状态.

哇,这就是现在的堆积.随着我的进步,我会添加更多或提出新问题.再次感谢你的帮助.

c++ architecture oop makefile

6
推荐指数
1
解决办法
976
查看次数

标签 统计

architecture ×1

c++ ×1

makefile ×1

oop ×1