在游戏对象定义中放置的位置

Where to place in game object definitions?

本文关键字:位置 游戏 对象 定义      更新时间:2023-10-16

这可能听起来像一个愚蠢的问题,但我不知道如何做到这一点。

在我的基于c++ ascii的roguelike游戏中,我将拥有大量的对象。每个分配的,在游戏中,对象将有一些共同的属性。(名称,大小,ObjectID,外观等)通常,我会使用静态变量,但这需要为每个对象创建一个新的类和初始化器。相反,我决定让每个分配的对象包含一个指向给定ObjectDef的指针,然后我可以使用它来解决这个问题。当对象具有需要实现的新功能时,我将为给定的类型的对象创建一个新类。

也就是说,我在哪里定义所有这些对象定义?我想把它们放在数组中,但我知道全局变量很糟糕,很糟糕,很糟糕。

一些一般的建议会很好。谢谢。

class WorldObjectDef //WHAT WE HAVE A LIST OF
{
  protected:
    std::string m_name;
    float m_size;
    int m_type;
    int m_id;
    AsciiNode m_node;
  public:
    WorldObjectDef(std::string, float, int, int, const AsciiNode &);
    int getId() const;
    std::string getName() const;
    float getSize() const;
    AsciiNode getNode() const;
};
class WorldObject //WHAT'S ALLOCATED IN A LEVEL
{
    WorldObjectDef * m_def;
  public:
    WorldObject(const WorldObjectDef &);
    int getId() const;
    std::string getName() const;
    float getSize() const;
    AsciiNode getNode() const;
};

我一直在想:像html这样的代码标签有什么问题吗?天哪,每行空格缩进真烦人。

我经常创建List<>来保存所有的活动对象(例如:对象(游戏中的和正在使用的),可以用来在一个循环中操作所有数据。这个列表可以在任何地方定义,只要它的可见度足够高。如果它需要全球化,那就这样吧。最好让代码工作,而不是考虑它是否以最大fps运行。

不要使用全局变量和goto是我记得要读的第一个警告。我不是说你应该忽略这些警告,而是要理解为什么大规模使用em不是一个好的做法。

全局变量是不好的,因为它们一直有效直到程序存在,或者被手动处理。如果你有主循环,我认为你有,你应该在其中定义这些变量

我真的觉得这里有问题。

你不一定需要为游戏世界中的每种对象类型(椅子、桌子、铅笔)定义一个新的类;但是你应该根据对象可能具有的行为类型为每一类对象定义一个类。

例如,猫对椅子。猫可能会靠自己的力量四处走动,发出声音等等。另一方面,椅子可能会被玩家移动,坐进去,甚至变成木柴或其他东西。

你会有一个顶级的类定义为WorldObject,你会从中派生一个Animal类和一个InanimateClass。Animal类可能有狗、猫或斑马的类型枚举。而InanimateClass可能会根据角色可能采取的动作进一步细分。

所有这些对象都将存储在List中,您可以测试对象类型以确定可以对它们进行哪些操作。

这样你就可以将对象的属性与对象实例本身一起保存,从而节省大量的工作。