在游戏对象定义中放置的位置
Where to place in game object definitions?
这可能听起来像一个愚蠢的问题,但我不知道如何做到这一点。
在我的基于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中,您可以测试对象类型以确定可以对它们进行哪些操作。
这样你就可以将对象的属性与对象实例本身一起保存,从而节省大量的工作。
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 在C++游戏中与库存系统作斗争
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 换位表导致测试失败(但在游戏中运行良好)
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 在重新居中之前获取游戏中的光标位置
- 访问冲突写入位置0x00000000.C++/SFML游戏
- 在游戏对象定义中放置的位置
- 人生游戏——印版到同一位置
- 追踪用户登陆桌面游戏的位置