gpt4 book ai didi

c++ - 我的 C++ 游戏架构

转载 作者:可可西里 更新时间:2023-11-01 18:28:30 25 4
gpt4 key购买 nike

我是一个相当有经验的程序员,但我对 C++ 中的 OOP 架构和设计还是比较陌生。我的大部分经验是使用 C# 和 Java。我最近努力用 C++ 编写一个简单的游戏引擎。我使用 SDL 来制作图形。在这篇文章中,我想讨论我的架构并获得一些反馈在上面。特别是,我遇到了一个需要帮助的设计问题。所以,这里是:

  • 在我的主函数中,我初始化了所有用于绘制到屏幕等的 SDL 内容。
  • 然后我实例化我打算使用的所有对象:地板、墙壁、玩家等。
  • 接下来我开始主循环。此循环执行每个对象的移动、碰撞检测和碰撞处理函数,并重绘它们。
  • 主循环一直运行到应用程序退出,每次迭代绘制一帧。

我的问题是:我试图做一种界面风格的设计。它涉及一系列允许每个对象实现一种行为的抽象基类。例如,如果我想让一个物体可以移动,它必须继承自可移动基类,该基类包含一个名为 move() 的虚函数和一些位置坐标。如果我希望它是可碰撞的,该对象将继承自可碰撞抽象类,它包含虚函数 checkCollision()handleCollision() 以及一个 hitbox 成员变量。一个东西就像玩家继承自这两个基类以及其他几个基类一样。

只要我在主循环中手动执行所有操作,这就足够了。我只能说:

player.move();
player.checkCollision();
player.handleCollision();
player.draw().

没关系。但我想能够在主循环中有一个 vector 或通用对象数组,并执行如下操作:

for each object in vector
if object is of type movable
object.move();
if object is of type collidable
object.checkCollision();

我以为我可以通过动态转换来实现这一点,但我真的想不出任何办法。我试过将它们存储为 void 指针,但这并不像我想要的那样工作。我一直在读这个我可能会尝试的视频游戏的游戏对象组件架构,但我真的很想挽救我已经拥有的东西书面。我认为这是一个很好的学习机会。如果有人有任何想法,我将不胜感激。我的架构与其他简单游戏引擎设计相比如何?我的界面架构有意义还是完全靠不住?

最佳答案

如果您使用 C++,请尝试 SFML,它比 SDL 更快,如果您了解 OpenGL,您也可以使用它。
针对您的问题:

class Entity {
//constructor and other stuff
void virtual exec() =0; ///<= pure virtual method
};

class Movable : Entity {
void move(); //do somthing
void exec() {move();};
};

class Collidable : Entity {
void col(); //do your job
void exec(){col();};
};

std::vector<Entity*> e_v;
///push some instance
for (Entity* e : e_v)
e->exec();

关于c++ - 我的 C++ 游戏架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14047165/

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