游戏引擎开发

Nat*_*ams -2 c++

我将重新创建一个我创建的游戏引擎.这次我想做得对,所以我对设计模式进行了一些研究,并尝试将各个部分组合在一起以实现我的目标.游戏引擎的想法很简单,但与此同时我不想牺牲可用性.

这是我正在思考的蓝图,让我知道你是否能看到任何垮台,尤其是可扩展性:

class Object
{
    public:
        string name;
}

class Object3D : public Object
{
    public:
        int x;
        int y;
        int z;
}

class Object2D : public Object
{
    public:
        int x;
        int y;
}

class cube : public Object3D
{
    cube() : x(0), y(0), z(0), name("cube") {}
}

class square
{
    ...
}

int main()
{
    SGL Engine(paramters);

    c = cube();
    s = square();

    Engine->Lib3D->AddCube(&c, "cube");
    Engine->Lib2D->AddSquare(&s, "square");
    Engine->Input->keyboard(&kbevent);
    while(Engine->running())
    {
        if (x)
            Engine->Draw("cube");
        else
            Engine->Draw("square");
    }
}

void kbevent(event-paramteres)
{
    if (key.up)
        engineptr->objects["cube"]->move(x,y);
}
Run Code Online (Sandbox Code Playgroud)

目标语言是C++.

jal*_*alf 6

首先,阅读本文.

"正确"做到这一点的唯一方法就是将过程颠倒过来.在游戏中使用引擎制作引擎.

第二.C++不是Java.C++没有基Object类,也不需要基类.不要试图将所有内容都放入继承层次结构中.如果每个对象都是多态的,那么你就会陷入困境(例如,一切都必须通过引用或指针传递,并通过引用或指针传递,以避免切片,甚至不会使你的代码更清晰)

世界上的一个物体有一个位置.它不是一个.所以不要继承x, y, z坐标.将它们放在一个坐标类中,该坐标类可以作为成员添加到需要它的类中.

字符串查找很慢,并且您需要处理字符串不唯一时的情况.(如果我不小心添加两个名为"cube"的对象,该怎么办?

为什么不尽可能地依赖普通引用或指针?

为什么我不能简单Engine->Draw(c)地告诉引擎绘制立方体?

但实际上,最重要的建议是,不要试图编写一个收缩包装的游戏引擎供以后使用.你将最终到达现在的位置:需要"重写它,这次做得 ".如果你想得到一些有用的东西,你需要从它的用例开始.先写游戏.完成后,您可以开始重构代码以将引擎分开.这样的话,你最终与发动机的工作原理.